如果您想要設置一個具有多個值或「子鍵」的cookie,並讓它們可以從.NET讀取,則需要將該子項存儲爲名稱 - 值對,格式類似查詢字符串。您可以使用jQuery.param()方法將JavaScript對象轉換爲查詢字符串。
var obj = { email: '[email protected]', 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功能,將& 2 =值2字符串轉換的名稱=值轉換成JavaScript對象{名稱:值,名稱2:值2}
- 最後一兩件事,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("[email protected]");
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,如果我有+10的值存儲在cookie中,我應該設置+10 cookie來做到這一點?將所有的值放在一個cookie中沒有意義嗎? –
如果您在cookie中存儲json序列化的字符串或使用單獨的cookie,則由您決定。 – ThiefMaster