2011-06-20 75 views
8

我正在使用流行的jQuery Cookie插件https://github.com/carhartl/jquery-cookie 不知道如何設置和讀取具有多個值的cookie?或者,也許可以添加/刪除該cookie的值?Jquery Cookie插件 - 多個值?

$ .cookie(「MyTestCookie」,email,{expires:10});

我想要的用戶名添加到相同的cookie

更新:只是一個例子在.net Storing multiple values in cookies

+1

我想你應該保持對於 –

+1

單獨的cookie,如果我有+10的值存儲在cookie中,我應該設置+10 cookie來做到這一點?將所有的值放在一個cookie中沒有意義嗎? –

+0

如果您在cookie中存儲json序列化的字符串或使用單獨的cookie,則由您決定。 – ThiefMaster

回答

17

如果您想要設置一個具有多個值或「子鍵」的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]) : ""; 
} 
+0

謝謝,很好的例子。 –

+0

任何想法,當我嘗試讀取cookie時,爲什麼我會得到空值?這是我的cookie值:email%3Drrr%2540asc.om%26password%3Da8f5f167f44f4964e6c998dee827110c –

+0

我試過兩種方法:string email = Request.Cookies [「SolidDomain」] [「email」]; string password = Request.Cookies [「SolidDomain」] [「password」]; string email1 = Request.Cookies.Get(「SolidDomain」)。Values.Get(「email」); string password2 = Request.Cookies.Get(「SolidDomain」)。Values.Get(「password」); –

4

即使它不勸你還是可以將多個值添加到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]); 

這是你可以用它來處理餅乾,其他的方法最合適的方法會稍微減慢頁面的速度。

4

試試這個: https://github.com/tantau-horia/jquery-SuperCookie

快速用法:

創造 - 創造麴奇

檢查 - 檢查所有腦幹

驗證 - 驗證cookie的值,如果JSON

check_index - 驗證是否在JSON存在指數

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