首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jquery Cookie插件-多值?

问Jquery Cookie插件-多值?
EN

Stack Overflow用户
提问于 2011-06-21 04:33:34
回答 4查看 21.3K关注 0票数 8

我正在使用流行的jquery Cookie插件https://github.com/carhartl/jquery-cookie想知道如何设置和读取具有多个值的cookie?或者,是否可以添加/删除该cookie的值?

$.cookie("MyTestCookie",邮箱,{ expires: 10 });

我想将用户名添加到相同的cookie

更新:仅是.Net Storing multiple values in cookies中的一个示例

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-21 05:58:08

如果您希望设置具有多个值或“子键”的cookie,并使其可从.NET读取,则需要将子键存储为格式类似于查询字符串的名称-值对。您可以使用jQuery.param()方法将Javascript对象转换为查询字符串。

代码语言:javascript
复制
var obj = { email: 'jdoe@example.com', username: 'jdoe' };
$.cookie("MyTestCookie", $.param(obj), { expires: 10 });

然后,在服务器上,您可以通过以下方式访问值:

代码语言:javascript
复制
var email = Request.Cookies["MyTestCookie"]["email"];
var username = Request.Cookies["MyTestCookie"]["username"];

编辑:我创建了一个测试页面,以显示在服务器和客户端上读/写多值cookie。http://www.systemex.net/Cookies/

备注:

,

  • ,你需要注意转义和取消转义子键。当读取和写入jquery cookie时,任何嵌入的=和&都会被正确地处理,使用选项{
  • :true },这样它就不会双重转义。
  • 我写了一个$.deparam函数,它将把一个name=value&name2=value2字符串转换成一个javascript对象{
  • :value,name2: value2 }
  • 最后一件事,jquery cookie插件不会覆盖同名的cookie,它只是简单地将它附加到当前的cookie集合中。在这一点上,重写插件以支持子键和修改现有cookie可能会更好。

无论如何,希望这能对你有所帮助。

这是Default.aspx

代码语言:javascript
复制
<h1>Get Cookie From Server:</h1>
<ul>
<li>Email: <%= GetCookie("MyTestCookie", "email")%></li>
<li>Username: <%= GetCookie("MyTestCookie", "username")%></li>
</ul>
<h1>Get Cookie From Client:</h1>
<ul>
<li>Email: <span class="cookie" data-name="MyTestCookie" data-key="email" /></li>
<li>Username: <span class="cookie" data-name="MyTestCookie" data-key="username" /></li>
<li>Raw: <span id="raw" /></li>
</ul>
<h1>Set Cookie From Client:</h1>
<ul>
<li>Email: <input type="text" name="email" value="" /></li>
<li>Username: <input type="text" name="username" value="" /></li>
</ul>
<input type="submit" value="Submit" />

<script>

    $(function () {
        $(".cookie").each(function (index) {
            var name = $(this).data('name');
            var key = $(this).data('key');
            var cookie = $.deparam($.cookie(name, { raw: true }));

            $(this).html(cookie[key]);
        });
        $('#raw').text(escape($.cookie("MyTestCookie"), { raw: true }));


        $("form").submit(function () {
            var o = {};
            o.email = $('input[name=email]').val();
            o.username = $('input[name=username]').val();
            var value = $.param(o);
            var cookie = $.cookie('MyTestCookie', value, { raw: true });
            return true;
        });
    });

    jQuery.deparam = function (params) {
        var o = {};
        if (!params) return o;
        var a = params.split('&');
        for (var i = 0; i < a.length; i++) {
            var pair = a[i].split('=');
            o[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
        }
        return o;
    }

</script>

Default.aspx.cs

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        var cookie = new HttpCookie("MyTestCookie");
        cookie["email"] = HttpUtility.UrlEncode("jdoe@example.com");
        cookie["username"] = HttpUtility.UrlEncode("jdoe&123");
        Response.Cookies.Add(cookie);
    }
}

public string GetCookie(string name, string key)
{
    var cookie = Request.Cookies[name];
    return cookie != null ? HttpUtility.UrlDecode(cookie[key]) : "";
}
票数 19
EN

Stack Overflow用户

发布于 2011-06-21 05:36:42

即使不建议这样做,您仍然可以向cookie添加多个值,并自己进行处理。

(这将减少浏览器中保存的cookies的数量,但由于现代浏览器是为处理大量cookies而设计的,因此它不会对加载速度造成任何影响)

您可以使用循环添加您的值,并使用特殊字符分隔它们,如‘cookie %’,您可以在您喜欢的任何加密方法上处理您的字符串,并将所有内容保存为一个单独的。

代码语言:javascript
复制
var setofcookies = username + "%" + password + "%" + email;
$.cookie("MyTestCookie", setofcookies, { expires: 10 });

稍后,您可以使用拆分函数将代码转换为正确的数组值:

代码语言:javascript
复制
var cookie = $.cookie('MyTestCookie')
var mycookies = cookie.split("%");
document.write(mycookies[0]);

这是您可以用来处理cookie的最合适的方法,其他方法会稍微减慢页面的速度。

票数 4
EN

Stack Overflow用户

发布于 2012-10-19 16:25:46

试试这个:https://github.com/tantau-horia/jquery-SuperCookie

快速用法:

create -创建cookie

检查-检查是否存在

verify -如果为JSON,则验证Cookie值

check_index -验证索引是否存在于JSON中

read_values -以字符串形式读取Cookie值

read_JSON -将Cookie值作为JSON对象读取

read_value -存储在JSON对象中的索引值

replace_value -替换存储在JSON对象中的指定索引中的值

remove_value -删除存储在JSON对象中的值和索引

只需使用:

代码语言:javascript
复制
$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_value("name_of_the_cookie","name_field_1");
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6417140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档