2011-06-20 16 views
8

Estoy usando el plugin popular de jquery Cookie https://github.com/carhartl/jquery-cookie ¿Se pregunta cómo configurar y leer una cookie con múltiples valores? ¿O tal vez es posible agregar/eliminar valores para esa cookie?Plugin de Jquery: ¿varios valores?

$ .cookie ("MyTestCookie", correo electrónico, {expira: 10});

Quiero agregar nombre de usuario para la misma cookie

Actualización: sólo un ejemplo en .Net Storing multiple values in cookies

+1

Creo que se debe mantener Separa las cookies para ese –

+1

así que si tengo +10 valores para almacenar en la cookie, ¿debo establecer +10 cookies para hacer eso? ¿No tendría sentido poner todos los valores en una cookie? –

+0

Depende de usted si almacena una cadena json serializada en su cookie o utiliza cookies separadas. – ThiefMaster

Respuesta

17

Si desea establecer una cookie que tenga varios valores o "subclaves" y pueda leerlos desde .NET, debe almacenar la subclave como pares nombre-valor formateados como una cadena de consulta. Puede usar el método jQuery.param() para convertir un objeto Javascript en una cadena de consulta.

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

A continuación, en el servidor, puede acceder a los valores como:

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

EDIT: He creado una página de prueba para mostrar la lectura/escritura de las galletas de valores múltiples tanto en el servidor y el cliente. http://www.systemex.net/Cookies/

NOTAS:

  • Se necesitan cuidar de escapar y no literal de las subclaves. De esta forma cualquier embedded = y & se manejan correctamente
  • Al leer y escribir las cookies de jquery, use la opción {raw: true} para que no se escape por partida doble.
  • escribí una función $ .deparam que convertirá un nombre = valor & nombre2 = valor2 cadena en un objeto Javascript {nombre: valor, nombre 2: valor2}
  • Una última cosa, el plugin jQuery cookie no sobrescribir una cookie con el mismo nombre, simplemente lo agrega a la colección actual de cookies.En este punto, probablemente sea mejor reescribir el complemento para admitir subclaves y modificar las cookies existentes.

De todos modos espero que esto ayude.

Aquí es 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

gracias, buen ejemplo. –

+0

¿Alguna idea de por qué obtengo nulos como valor cuando trato de leer una cookie? ese es el valor de mi cookie: email% 3Drrr% 2540asc.om% 26contraseña% 3Da8f5f167f44f4964e6c998dee827110c –

+0

Intenté en ambos sentidos: cadena email = Request.Cookies ["SolidDomain"] ["email"]; string password = Request.Cookies ["SolidDomain"] ["password"]; cadena email1 = Request.Cookies.Get ("SolidDomain"). Values.Get ("email"); cadena contraseña2 = Request.Cookies.Get ("SolidDomain"). Values.Get ("contraseña"); –

4

A pesar de que no es recomendable todavía puede añadir varios valores a una galleta y hacer el procesamiento mismo.

(Esto reducirá la cantidad de cookies guardados en el navegador pero desde navegadores modernos están diseñados para proceso enormes cargas de cookies que no haría nada a la velocidad de carga )

Puede agregar su valor mediante un bucle y separarlos usando un carácter especial como '%' y puede procesar su cadena con cualquier método de cifrado que prefiera y guardar todo como una sola cookie.

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

Más tarde se puede utilizar el SPLIT función para obtener el código en adecuada valor de matriz:

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

Este es el método más apropiado se puede utilizar para procesar las galletas, otros métodos ralentizará un poco la página.

4

Prueba con esto: https://github.com/tantau-horia/jquery-SuperCookie

Uso rápida:

crear - crear cookie

cheque - check existencia

verificar - verificar valor de la cookie si JSON

check_index - verificar si existe índice en JSON

read_values ​​- leer valor de la cookie como cadena

read_JSON - leer cookies valor como objeto JSON

read_value - valor de lectura almacenado en el objeto JSON

replace_value - sustituir el valor de un índice especificado almacenado en el objeto JSON

remove_value - quitar valor y el índice almacenado en JSON objeto

sólo tiene que utilizar:

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