Jquery Cookie插件 – 多个值?

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

$ .cookie(“MyTestCookie”,email,{expires:10});

我想在同一个cookie中添加用户名

更新:只是.Net中的一个示例在cookie中存储多个值

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

var obj = { email: 'jdoe@example.com', username: 'jdoe' }; $.cookie("MyTestCookie", $.param(obj), { expires: 10 }); 

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

 var email = Request.Cookies["MyTestCookie"]["email"]; var username = Request.Cookies["MyTestCookie"]["username"]; 

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

笔记:

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

无论如何希望这有帮助。

这是Default.aspx

 

Get Cookie From Server:

  • Email: <%= GetCookie("MyTestCookie", "email")%>
  • Username: <%= GetCookie("MyTestCookie", "username")%>

Get Cookie From Client:

  • Email:
  • Username:
  • Raw:

Set Cookie From Client:

  • Email:
  • Username:

Default.aspx.cs

 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]) : ""; } 

即使不建议你仍然可以为cookie添加多个值并自己进行处理。

(这将减少浏览器中保留的cookie数量,但由于现代浏览器旨在处理大量的cookie,因此无法对加载速度做任何事情)

您可以使用循环添加值并使用特殊字符(如’ ‘)将它们分开,您可以使用您喜欢的任何加密方法处理字符串,并将所有加密方法保存为单个cookie。

 var setofcookies = username + "%" + password + "%" + email; $.cookie("MyTestCookie", setofcookies, { expires: 10 }); 

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

 var cookie = $.cookie('MyTestCookie') var mycookies = cookie.split("%"); document.write(mycookies[0]); 

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

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

快速使用:

创建 – 创建cookie

检查 – 检查是否存在

validation – 如果是JSON,请validationcookie值

check_index – validationJSON中是否存在索引

read_values – 将cookie值读为字符串

read_JSON – 将cookie值读取为JSON对象

read_value – 读取存储在JSON对象中的索引值

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

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

只需使用:

 $.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"); 

当我使用的时候

 var obj = { a: 'test', b: 'best' }; $.cookie("MyCookie", $.param(obj), { expires: 10 }); 

我在cookie中得到了这个值

一%3Dtest%26B%3Dbest

所以得到类似的东西

一个测试=&B =最好

你需要在$ .cookie()之前添加这一行

 $.cookie.raw = true;