Cookies

Un elemento que usualmente se extraña en el lenguaje JavaScript es la posibilidad de realizar ciertas acciones que trasciendan y perduren para otras sesiones de conección a Internet.
Actualmente, existe una posibilidad de guardar información, en el lado del cliente, mediante el sistema de cookies.

Qué son las cookies?

Una cookie es una estructura:
Nombre
Contiene un identificador único de la cookie, actualmente puede ser prácticamente cuaalquier string dado que es empaquetado de acuerdo al www-encoding usual.
Valor
Un string que contiene el valor asociado al Nombre de la cookie.
Fecha expiración
La fecha en que la cookie será borrada del disco. Las fechas en JavaScript se manejan como enteros que contienen el número de milisegundos transcurridos desde la medianoche del 1 de enero de 1970. Si es NULL se entiende que la cookie se borr´ al terminar la sesión
Ruta de validez
A partir de cuales directorios del servidor que originó el requerimiento de grabar-cookie será válida la cookie. Si es NULL se entiende que su valor es: /, o sea, válida en todo el servidor.
Dominio de validez
Indica bajo que dominio será válida la cookie.
Necesidad de un canal seguro?
Si es verdadero, se usará el protocolo HTTPS para la transferencia de esta cookie, evitando que la información pueda ser vista.

Como se usan las cookies?

Para utilizar cookies, existe una biblioteca de funciones disponibles, desarrolladas por hIdaho design, que son de disponibilidad pública.
A continuación se transcribe el código de las cookies. Debe ser copiado tal como aparece aquí. La parte del final, de los ejemplos, debería ser borrada al momento de usar esta biblioteca.

Código fuente
//
// Cookie Functions — “Toss Your Cookies” Version (22-Mar-96)
//
// Escritas por: Bill Dortch, hIdaho Design <bdortch@hidaho.com>
// Comentarios traducidos por: Carlos Castillo <ccastill@dcc.uchile.cl>
// URL Ref: http://www.hIdaho.com/, http://www.dic.uchile.cl/~manual/
// Las siguientes funciones son de dominio publico.
//
// Esta version modifica la funcion DeleteCookie, debido a un
// Bug de JavaScript en Macintosh, que hace que en ellos
// las fechas esten adelantadas un dia. El metodo fue
// propuesto por Brendan Eich de Netscape.
//
// El codigo de DeleteCookie recalibra la fecha antes de borrar la
// cookie.
//
// ***** AQUI ESTA LA FUNCION PARA ARREGLAR. NO BORRAR *****

function FixCookieDate (date) {
var base = new Date(0);
var skew = base.getTime(); // dawn of (Unix) time – should be 0
if (skew > 0) // Except on the Mac – ahead of its time
date.setTime (date.getTime() – skew);
}

// ***** FIN *****
//
// El mismo error afecta a SetCookie. El autor incluyo, y comento
// una linea que llama a fixcookiedate. Se puede sacar el comentario
// o usar FixCookieDate en todo el programa. Lo importante es no
// usarla dos veces seguidas sobre un mismo objeto.
//
//*********************************************************************
//
// Funcion interna que retorna el valor desempaquetado de una cookie.
//
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (“;”, offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {
var arg = name + “=”;
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(” “, i) + 1; if (i == 0) break; } return null; } function SetCookie (name, value) { var argv = SetCookie.arguments; var argc = SetCookie.arguments.length; var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;

// Se puede retirar el comentario de la siguiente linea
// para correccion automatica de fecha.
//if (expires!=null) FixCookieDate(expires);

document.cookie = name + “=” + escape (value) +
((expires == null) ? “” : (“; expires=” + expires.toGMTString())) +
((path == null) ? “” : (“; path=” + path)) +
((domain == null) ? “” : (“; domain=” + domain)) +
((secure == true) ? “; secure” : “”);
}

function DeleteCookie (name) {
var exp = new Date();
FixCookieDate (exp); // Correct for Mac bug
exp.setTime (exp.getTime() – 1); // This cookie is history
var cval = GetCookie (name);
if (cval != null)
document.cookie = name + “=” + cval + “; expires=” + exp.toGMTString();
}

//
// Fin de las funciones Cookie
//

Funciones
GetCookie
Retorna el valor de la cookie especificada por name.
name
String que contiene el nombre de la cookie.

SetCookie
Crea o actualiza una cookie.
name
String que contiene el nombre de la cookie.
value
String que contiene el valor de la cookie. Puede ser cualquier string de caracteres validos.
expires (opcional)
Objeto de tipo Date que contiene la fecha de expiracion de la cookie. Si se omite o es null, la cookie se borrara al finalizar la sesion.
path (opcional)
String que indica la ruta para la cual la cookie es valida si se omite o es null, se usa la del documento que la creo.
domain (opcional)
String indicando el dominio para el cual es valida. Si se omite o es null, se usa el dominio del documento que la creo.
secure (opcional)
Valor booleano (true/false) que indica si la cookie necesita un canal seguro (HTTPS)

Los primeros dos parametros se requieren. Los otros, si se suministran, deben ser pasados en el orden listado mas arriba. Para omitir uopcion no usada, se pasa null en su lugar. Por ejemplo, para llamar a SetCookie usando nombre, valor y ruta, usted tipea:

SetCookie (“myCookieName”, “myCookieValue”, null, “/”);

Los parametros omitidos al final no requieren pasar valores nulos.

Para pasar una cookie segura para la ruta “/myPath”, que expire despues de la sesion actual:

SetCookie (myCookieVar, cookieValueVar, null, “/myPath”, null, true);

DeleteCookie
Funcion que borra una cookie (fija su fecha de expiracion a la fecha actual.
name
String que contiene el nombre de la cookie.

Ejemplo
Los siguientes ejemplos ilustran el uso de las funciones cookie.

var expdate = new Date ();
expdate.setTime (expdate.getTime() + (24 * 60 * 60 * 1000)); // 24 hrs from now (mod Mac bug)
SetCookie (“ccpath”, “http://www.hidaho.com/colorcenter/”, expdate);
SetCookie (“ccname”, “hIdaho Design ColorCenter”, expdate);
SetCookie (“tempvar”, “Esta es una cookie temporal.”);
SetCookie (“ubiquitous”, “Esta cookie funcionara en cualquier parte de el dominio actual”,null,”/”);
SetCookie (“paranoid”, “Esta cookie requiere comunicaciones seguras.”,expdate,”/”,null,true);
SetCookie (“goner”, “Esta cookie morira !”);
document.write (document.cookie + ”
“);
DeleteCookie (“goner”);
document.write (“ccpath = ” + GetCookie(“ccpath”) + ”
“);
document.write (“ccname = ” + GetCookie(“ccname”) + ”
“);
document.write (“tempvar = ” + GetCookie(“tempvar”) + ”
“);

Resultado del Ejemplo:

ccpath=http%3A//www.hidaho.com/colorcenter/; ccname=hIdaho%20Design%20ColorCenter; tempvar=Esta%20es%20una%20cookie%20temporal.; goner=Esta%20cookie%20morira%20%21; _pk_id.1.4209=ee930eb7f960cc67.1436457777.20.1449077519.1449075976.; _pk_id.2.4209=9631d41ed503ddb0.1436795566.1.1436795588.1436795566.; _pk_id.272.4209=f72f4f77cab432c1.1441140631.1.1441140767.1441140631.; __utma=1.758554123.1444310275.1444310275.1446669257.2; __utmz=1.1444310275.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmx=1.00014281761722234082:1:1; __utmxx=1.00014281761722234082:1309783924:2592000; __utmv=1.non-member; _ga=GA1.1.758554123.1444310275; __qca=P0-837922450-1447191416658; s_nr=1447249726743; _cb_ls=1; _chartbeat2=CNQLKSCqSVCZBqxQkT.1448038523559.1448038523559.1; ubiquitous=Esta%20cookie%20funcionara%20en%20cualquier%20parte%20de%20el%20dominio%20actual
ccpath = http://www.hidaho.com/colorcenter/
ccname = hIdaho Design ColorCenter
tempvar = Esta es una cookie temporal.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *