Jquery Cookie插件 – 多个值?

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

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

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

更新:只是.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]) : "";
}

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...