我正在使用流行的jquery Cookie插件
https://github.com/carhartl/jquery-cookie
想知道如何设置和读取具有多个值的cookie?或者也许可以添加/删除该cookie的值?
想知道如何设置和读取具有多个值的cookie?或者也许可以添加/删除该cookie的值?
$.cookie(“MyTestCookie”,email,{expires:10});
更新:只是.Net Storing multiple values in cookies中的一个示例
解决方法
如果要设置具有多个值或“子键”的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/
笔记:
>您需要注意转义和取消子键.这样任何嵌入式=和&处理得当
>在读取和编写jquery cookie时,请使用选项{raw:true},这样它就不会双重转义.
>我写了一个$.deparam函数,它将name = value& name2 = value2字符串转换为javascript对象{name:value,name2:value2}
>最后一件事,jquery cookie插件不会覆盖具有相同名称的cookie,它只是将其附加到当前cookie集合中.此时,重写插件以支持子键和修改现有cookie可能会更好.
无论如何希望这有帮助.
这是Default.aspx
<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
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]) : ""; }