2011-06-20 16 views
8

Używam popularnej wtyczki cookie jquery https://github.com/carhartl/jquery-cookie Zastanawiasz się, jak ustawić i przeczytać plik cookie z wieloma wartościami? A może jest możliwe dodanie/usunięcie wartości tego pliku cookie?Wtyczka Jquery Cookie - wiele wartości?

$ .cookie ("MyTestCookie", e-mail, {wygaśnięcie: 10});

chcę dodać użytkownika do tego samego pliku cookie

UPDATE: tylko przykład w .NET Storing multiple values in cookies

+1

myślę, że powinno być utrzymanie osobne pliki cookie dla tego –

+1

, więc jeśli mam przechowywać +10 wartości w pliku cookie, powinienem ustawić +10 plików cookie, aby to zrobić? Czy nie ma sensu umieszczanie wszystkich wartości w jednym pliku cookie? –

+0

Aż do ciebie, jeśli przechowujesz ciąg serialu json w swoim pliku cookie lub używasz oddzielnych plików cookie. – ThiefMaster

Odpowiedz

17

Jeśli chcesz ustawić plik cookie, który ma wiele wartości lub "podkluczy" i mieć je odczytywalne z .NET, musisz przechowywać podklucz jako pary nazwa-wartość sformatowane jako ciąg znaków zapytania. Można użyć metody jQuery.param() w celu przekonwertowania obiektu JavaScript na ciąg znaków zapytania.

var obj = { email: '[email protected]', username: 'jdoe' }; 
$.cookie("MyTestCookie", $.param(obj), { expires: 10 }); 

Następnie na serwerze, można uzyskać dostęp do wartości, jak:

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

EDIT: I stworzył stronę testową, aby pokazać odczytu/zapisu plików cookie multi-wartością zarówno na serwerze i kliencie. http://www.systemex.net/Cookies/

UWAGI:

  • Trzeba dbać o ucieczce i unescaping podklucze. W ten sposób wszelkie embedded = i & są obsługiwane poprawnie
  • Podczas odczytywania i zapisywania plików cookie jquery, użyj opcji {raw: true}, aby nie dublowała się ona.
  • napisałem funkcję $ .deparam że będzie przekonwertować name = wartość & name2 = value2 ciąg w JavaScript Object {nazwa: wartość, name2: wartość2}
  • Ostatnią rzeczą, plugin jquery cookies nie nadpisania ciasteczko o tej samej nazwie, po prostu dołącza je do aktualnego zbioru ciasteczek.W tym momencie prawdopodobnie lepiej byłoby przepisać wtyczkę, aby obsługiwała podklucze i modyfikowała istniejące pliki cookie.

W każdym razie, mam nadzieję, że to pomoże.

Oto Defalult.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

dzięki, świetny przykład. –

+0

jakikolwiek pomysł, dlaczego otrzymuję wartości null jako wartość, gdy próbuję odczytać cookie? to jest moja wartość cookie: e-mail% 3Drrr% 2540asc.om% 26password% 3Da8f5f167f44f4964e6c998dee827110c –

+0

Próbowałem w obie strony: 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

Mimo to nie poradził nadal można dodać wiele wartości do cookie i zrobić przetwarzania siebie.

(Zmniejszy to ilość plików cookie przechowywane w przeglądarce, ale ponieważ Nowoczesne przeglądarki są przeznaczone do procesowych ogromnych obciążeń ciasteczka to nie zrobi nic do prędkości załadunku)

Możesz dodać swoją wartość za pomocą pętli i oddzielić je za pomocą specjalnego znaku, takiego jak "%", a możesz przetworzyć ciąg znaków na dowolną metodę szyfrowania, którą chcesz i zapisać jako pojedynczy plik cookie.

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

Później można użyć Split funkcji w celu uzyskania kodu do prawidłowej wartości tablicy:

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

Jest to najbardziej odpowiednia metoda można użyć do przetworzenia ciasteczek, innych metod spowolni działanie strony.

4

Spróbuj tego: https://github.com/tantau-horia/jquery-SuperCookie

Krótki Użycie:

tworzenie - tworzenie cookie

check - sprawdź istnienia

zweryfikować - sprawdzić wartość cookie jeśli JSON

check_index - sprawdzić, czy indeks istnieje w JSON

read_values ​​- odczytać wartość cookie, jako ciąg

read_JSON - czytać cookies wartość jako JSON obiekt

read_value - odczyt wartości indeksu przechowywanego w obiekcie JSON

replace_value - zastąpić wartość z określonego indeksu przechowywane w obiekcie JSON

remove_value - usunąć wartość i indeks przechowywane w JSON obiektu

Wystarczy użyć:

$.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"); 
Powiązane problemy