Sei sulla pagina 1di 12

ESCUELA ESPECIALIZADA EN INGENIERIA ITCA FEPADE

CENTRO REGIONAL SANTA ANA

ESCUELA DE INGENIERÍA EN COMPUTACIÓN

TÉCNICO EN INGENIERÍA DE SISTEMAS INFORMÁTICOS

Una cookie es un pequeño fragmento de texto que acompaña a las solicitudes y a las páginas mientras éstas se
transmiten del servidor Web al explorador y viceversa. La cookie contiene información que la aplicación Web
puede leer cada vez que el usuario visita el sitio.

Escenarios
Las cookies proporcionan un medio para almacenar información específica del usuario en las aplicaciones Web.
Por ejemplo, cuando un usuario visita un sitio, las cookies pueden emplearse para almacenar las preferencias del
usuario u otra información. Cuando el usuario visite el sitio Web de nuevo, la aplicación podrá recuperar la
información que almacenó previamente.

Una cookie es un pequeño fragmento de texto que acompaña a las solicitudes y a las páginas mientras éstas se
transmiten del servidor Web al explorador y viceversa. La cookie contiene información que la aplicación Web
puede leer cada vez que el usuario visita el sitio.

Por ejemplo, si un usuario solicita una página de un sitio y la aplicación no solo envía una página, sino también
una cookie que contiene la fecha y la hora, cuando el explorador del usuario obtenga la página, también
obtendrá la cookie, que se almacenará en una carpeta en el disco duro del usuario.

Más adelante, si el usuario solicita de nuevo una página del mismo sitio, cuando introduzca la dirección URL, el
explorador buscará en el disco duro local una cookie asociada a dicha dirección. Si la cookie existe, el explorador
la enviará al sitio junto con la solicitud de la página. A continuación, la aplicación podrá determinar la fecha y
hora en que el usuario visitó el sitio por última vez. Podría utilizar dicha información para mostrar un mensaje al
usuario o comprobar una fecha de expiración.

Las cookies están asociadas a un sitio Web, no a una página específica, por lo que el explorador y el servidor
intercambiarán información de cookies independientemente de la página que el usuario solicite en su sitio.
Todos los sitios que visita el usuario pueden enviar una cookie al explorador del usuario; éste las almacenará
independientemente.

Las cookies permiten a los sitios Web almacenar información sobre los visitantes. De forma más general, las
cookies son una manera de mantener la continuidad en una aplicación Web, es decir, de realizar la
administración de estados. Excepto durante los breves momentos en los que están realmente intercambiando
información, el explorador y el servidor Web están desconectados. Las solicitudes que realiza un usuario a un
servidor Web se tratan por separado unas de las otras. Sin embargo, muchas veces, es útil para el servidor Web
reconocer a los usuarios cuando solicitan una página. Por ejemplo, el servidor Web de un sitio de compras
efectúa el seguimiento de cada uno de los compradores para poder administrar los carros de la compra y la
información específica del usuario. Por consiguiente, una cookie actúa como una especie de tarjeta de llamada,
que presenta la identificación necesaria para que la aplicación sepa cómo continuar.

Las cookies se utilizan para muchos propósitos, todos ellos destinados a facilitar al sitio Web el reconocimiento
de los usuarios. Por ejemplo, un sitio que lleva a cabo un sondeo podría utilizar una cookie simplemente como
un valor booleano para indicar si el explorador del usuario ya ha participado en la votación, a fin de evitar que el
usuario vote dos veces. Un sitio que solicita a un usuario que inicie una sesión podría utilizar una cookie para
registrar dicho inicio de sesión a fin de que el usuario no tenga que seguir proporcionando sus credenciales.

Limitaciones de las cookies

[1]
La mayoría de los exploradores admiten cookies de un tamaño máximo de 4096 bytes. Debido a este límite, es
recomendable utilizar las cookies para almacenar pequeñas cantidades de datos, o mejor aún, un identificador
como un id. de usuario. Este id. se puede utilizar para identificar al usuario y leer información relativa a éste de
una base de datos u otro almacén de datos. (Vea la sección "Las cookies y la seguridad" más adelante para
obtener información sobre las implicaciones de seguridad del almacenamiento de información sobre el usuario.)

Los exploradores también imponen limitaciones respecto al número de cookies que cada sitio puede almacenar
en el equipo del usuario. La mayoría de los exploradores sólo permiten 20 cookies por sitio; si se intenta
almacenar más, las cookies más antiguas se descartan. Algunos exploradores también definen un límite absoluto,
normalmente 300, en cuanto al número de cookies que aceptan desde todos los sitios en conjunto.

Una limitación de las cookies con la que podría encontrarse es que los usuarios pueden configurar sus
exploradores para rechazarlas. Si define una directiva de privacidad P3P y la coloca en la raíz de su sitio Web,
habrá más exploradores que acepten cookies de su sitio. Sin embargo, podría ser necesario evitar por completo
las cookies y utilizar otro mecanismo para almacenar información específica del usuario. Un método común para
almacenar información sobre el usuario es el estado de sesión, pero éste depende de las cookies, tal y como se
explica más adelante en la sección "Las cookies y el estado de sesión".

Aunque las cookies pueden ser muy útiles en su aplicación, ésta no debería depender exclusivamente de ellas.
No las utilice para implementar características importantes. Si su aplicación debe depender de las cookies, puede
comprobar si el explorador las aceptará. Vea la sección "Comprobar si un explorador acepta cookies" más
adelante en este tema.

Escribir cookies
En un sistema de usuario, el explorador es el responsable de la administración de las cookies. Éstas se envían al
explorador a través del objeto HttpResponse, que expone una colección denominada Cookies. Puede tener
acceso al objeto HttpResponse como la propiedad Response de la clase Page. Las cookies que desee enviar al
explorador se deben agregar a esta colección. Al crear una cookie, debe especificar las propiedades Name y
Value. Cada una de las cookies debe tener un nombre único a fin de que después se las pueda identificar al
leerlas desde el explorador. Dado que las cookies se almacenan por nombre, asignar el mismo nombre a dos
cookies ocasionará que una de ellas se sobrescriba.

También se puede establecer la fecha y hora de expiración de una cookie. El explorador elimina las cookies
expiradas cuando un usuario visita el sitio que las escribió. La expiración de una cookie debería establecerse en
función del tiempo que su aplicación considere que el valor de la misma seguirá siendo válido. Para que una
cookie no expire nunca, puede establecer la fecha de expiración en 50 años a partir de ahora.

Nota:

Los usuarios pueden borrar las cookies de su equipo en cualquier momento.


Aunque almacene cookies con períodos de expiración largos, un usuario
puede decidir eliminarlas y así destruir toda la información que se haya
almacenado en ellas.

Si no establece la expiración de la cookie, ésta se crea pero no se almacena en el disco duro del usuario. En su
lugar, la cookie se mantiene como parte de la información de sesión del usuario. Cuando el usuario cierra el
explorador, la cookie se descarta. Una cookie no persistente de este tipo resulta útil para la información que se
debe almacenar durante períodos cortos de tiempo o que, por motivos de seguridad, no se debería escribir en el
disco del equipo cliente. Por ejemplo, las cookies no persistentes son útiles si el usuario está trabajando en un
equipo público en cuyo disco no desea que se escriba la cookie.

Puede agregar cookies a la colección Cookies de varias maneras. El ejemplo siguiente muestra dos métodos para
escribir cookies:

Visual Basic

[2]
Response.Cookies("userName").Value = "patrick"
Response.Cookies("userName").Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookie("lastVisit")


aCookie.Value = DateTime.Now.ToString()
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)

El ejemplo agrega dos cookies a la colección Cookies, una denominada userName y la otra denominada lastVisit.
Para la primera cookie, los valores de la colección Cookies se establecen directamente. Puede agregar valores a la
colección de esta forma porque Cookies se deriva de una colección especializada de tipo
NameObjectCollectionBase.

Para la segunda cookie, el código crea una instancia de un objeto de tipo HttpCookie, establece sus propiedades
y, a continuación, lo agrega a la colección Cookies a través del método Add. Cuando se crea una instancia de un
objeto HttpCookie, se debe pasar el nombre de la cookie como parte del constructor.

Ambos ejemplos llevan a cabo la misma tarea: escriben una cookie en el explorador. En ambos métodos, el valor
de expiración debe ser de tipo DateTime. Sin embargo, el valor lastVisited también es un valor de fecha y hora.
Dado que todos los valores de las cookies se almacenan como cadenas, el valor de fecha y hora se tiene que
convertir en un objeto String.

Cookies con varios valores


Puede almacenar un valor en una cookie, como el nombre de usuario y la última visita. También puede almacenar
varios pares de nombre y valor en una sola cookie. Estos pares de nombre y valor se denominan subclaves. (Las
subclaves se disponen de forma similar a una cadena de consulta en una dirección URL.) Por ejemplo, en lugar de
crear dos cookies independientes denominadas userName y lastVisit, puede crear una sola cookie denominada
userInfo que tenga las subclaves userName y lastVisit.

Son varias las razones que hacen aconsejable el uso de subclaves. En primer lugar, es conveniente colocar la
información relacionada o similar en una sola cookie. Además, dado que toda la información está en una sola
cookie, los atributos de ésta, como la expiración, se aplican a toda la información. (A la inversa, si desea asignar
distintas fechas de expiración a distintos tipos de información, debería almacenar ésta en cookies
independientes.)

Además, una cookie con subclaves también le ayudará a limitar el tamaño de los archivos de cookies. Tal y como
se ha indicado en la sección "Limitaciones de las cookies", las cookies generalmente están limitadas a 4096  bytes
y no se pueden almacenar más de 20 cookies por sitio. Si utiliza una sola cookie con subclaves, empleará menos
de las 20 cookies asignadas a su sitio. Además, una sola cookie ocupa unos 50 caracteres para la sobrecarga
(información de expiración, etc.), más la longitud del valor que almacene en ella, cantidades que hay que restar
del límite de 4096 bytes. Si almacena cinco subclaves en lugar de cinco cookies independientes, evita la
sobrecarga de las cookies independientes y puede ahorrar alrededor de 200 bytes.

Para crear una cookie con subclaves, puede utilizar una variación de la sintaxis que se emplea para escribir una
sola cookie. En el ejemplo siguiente se muestran dos maneras de escribir la misma cookie, cada una con dos
subclaves:

Visual Basic
Response.Cookies("userInfo")("userName") = "patrick"
Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString()
Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookie("userInfo")


aCookie.Values("userName") = "patrick"
aCookie.Values("lastVisit") = DateTime.Now.ToString()
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)

[3]
Controlar el ámbito de las cookies
De forma predeterminada, todas las cookies de un sitio se almacenan juntas en el cliente y todas ellas se envían
al servidor con cualquier solicitud para ese sitio. Es decir, cada página de un sitio obtiene todas las cookies para
ese sitio. Sin embargo, puede establecer el ámbito de las cookies de dos maneras:

 Limite el ámbito de las cookies a una carpeta del servidor,


lo que le permitirá limitar las cookies a una aplicación del
sitio.
 Establezca el ámbito en un dominio, lo que le permitirá
especificar los subdominios de un dominio que pueden
tener acceso a una cookie.

Limitar las cookies a una carpeta o aplicación

Para limitar las cookies a una carpeta del servidor, establezca la propiedad Path de la cookie, como en el ejemplo
siguiente:

Visual Basic
Dim appCookie As New HttpCookie("AppCookie")
appCookie.Value = "written " & DateTime.Now.ToString()
appCookie.Expires = DateTime.Now.AddDays(1)
appCookie.Path = "/Application1"
Response.Cookies.Add(appCookie)

Nota:

También puede escribir cookies agregándolas directamente a la colección


Cookies, como se ha mostrado en ejemplos anteriores.

La ruta de acceso puede ser una ruta de acceso física situada bajo la raíz del sitio o una raíz virtual. El efecto
conseguido será que la cookie sólo estará disponible para las páginas de la carpeta Application1 o para la raíz
virtual. Por ejemplo, si su sitio se denomina www.contoso.com, la cookie creada en el ejemplo anterior estará
disponible para las páginas cuya ruta de acceso sea http://www.contoso.com/Application1/ y para las páginas
situadas bajo dicha carpeta. Sin embargo, la cookie no estará disponible para las páginas de otras aplicaciones,
como http://www.contoso.com/Application2/ o http://www.contoso.com/.

Nota:

En algunos exploradores, la ruta de acceso distingue entre mayúsculas y


minúsculas. No es posible controlar la forma en la que los usuarios escriben
las direcciones URL en sus exploradores, pero si su aplicación depende de
cookies vinculadas a una ruta de acceso determinada, asegúrese de que el
formato de mayúsculas y minúsculas de las direcciones URL de los
hipervínculos que cree coincide con el del valor de la propiedad Path.

Limitar el ámbito de dominio de las cookies

De forma predeterminada, las cookies se asocian a un dominio específico. Por ejemplo, si su sitio es
www.contoso.com, las cookies que escriba se envían al servidor cuando los usuarios solicitan una página de ese
sitio. (Esto podría no incluir las cookies que tengan un valor de ruta de acceso determinado.) Si su sitio tiene

[4]
subdominios, por ejemplo, contoso.com, sales.contoso.com y support.contoso.com, puede asociar las cookies a
un subdominio concreto. Para ello, establezca la propiedad Domain de la cookie, como en este ejemplo:

Visual Basic
Response.Cookies("domain").Value = DateTime.Now.ToString()
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "support.contoso.com"

Cuando el dominio se establece de esta manera, la cookie sólo estará disponible para las páginas del subdominio
especificado. También puede utilizar la propiedad Domain para crear una cookie que se pueda compartir entre
varios subdominios, como se muestra en el ejemplo siguiente:

Visual Basic
Response.Cookies("domain").Value = DateTime.Now.ToString()
Response.Cookies("domain").Expires = DateTime.Now.AddDays(1)
Response.Cookies("domain").Domain = "contoso.com"

De esta manera, la cookie estará disponible para el dominio principal, así como para los dominios
sales.contoso.com y support.contoso.com.

Leer las cookies


Cuando un explorador realiza una solicitud al servidor, envía las cookies para ese servidor junto con la solicitud.
En sus aplicaciones ASP.NET, puede leer las cookies mediante el objeto HttpRequest, que está disponible como
propiedad Request de la clase Page. La estructura del objeto HttpRequest es esencialmente la misma que la del
objeto HttpResponse, por lo que la lectura de las cookies del objeto HttpRequest se realiza de manera similar a la
escritura de las cookies en el objeto HttpResponse. En el ejemplo de código siguiente se muestran dos maneras
de obtener el valor de una cookie denominada username y mostrar su valor en un control Label:

Visual Basic
If Not Request.Cookies("userName") Is Nothing Then
Label1.Text = Server.HtmlEncode(Request.Cookies("userName").Value)
End If

If Not Request.Cookies("userName") Is Nothing Then


Dim aCookie As HttpCookie = Request.Cookies("userName")
Label1.Text = Server.HtmlEncode(aCookie.Value)
End If

Antes de intentar obtener el valor de una cookie, debería asegurarse de que dicha cookie existe; si no es así, se
iniciará una excepción NullReferenceException. Tenga en cuenta también que se ha llamado al método
HtmlEncode para codificar el contenido de una cookie antes de mostrarlo en la página. Esto garantiza que un
usuario malintencionado no ha agregado un script ejecutable a la cookie. Para obtener más información sobre la
seguridad de las cookies, vea la sección "Las cookies y la seguridad".

Nota:

Dado que cada explorador almacena las cookies de forma diferente, es


posible que un explorador no sea capaz de leer las cookies de los demás
exploradores instalados en el mismo equipo. Por ejemplo, si utiliza Internet
Explorer para probar una página una vez, pero más adelante utiliza otro
explorador para realizar una nueva prueba, el segundo explorador no
encontrará las cookies guardadas por Internet Explorer.

[5]
Del mismo modo, la lectura del valor de una subclave de una cookie es similar a su establecimiento. En el
ejemplo de código siguiente se muestra una manera de obtener el valor de una subclave:

Visual Basic
If Not Request.Cookies("userInfo") Is Nothing Then
Label1.Text = _
Server.HtmlEncode(Request.Cookies("userInfo")("userName"))
Label2.Text = _
Server.HtmlEncode(Request.Cookies("userInfo")("lastVisit"))
End If

En el ejemplo anterior, el código lee el valor de la subclave lastVisit, que se estableció previamente en la
representación de cadena de un valor DateTime. Las cookies almacenan valores en forma de cadenas, por lo que
si desea utilizar el valor lastVisit como fecha, debe convertirlo al tipo apropiado, como en este ejemplo:

Visual Basic
Dim dt As DateTime
dt = DateTime.Parse(Request.Cookies("userInfo")("lastVisit"))

Cambiar la fecha de expiración de una cookie

El explorador es responsable de administrar las cookies, y la fecha y hora de expiración de éstas le ayudan a
administrar su almacén de cookies. Por consiguiente, aunque un usuario puede leer el nombre y el valor de una
cookie, no puede leer su fecha y hora de expiración. Cuando el explorador envía la información de las cookies al
servidor, no incluye la información de expiración. (La propiedad Expires de las cookies siempre devuelve un valor
de fecha y hora de cero.) Si le preocupa la fecha de expiración de una cookie, deberá restablecerla; esta
operación se describe en la sección "Modificar y eliminar las cookies".

Nota:

Puede leer la propiedad Expires de una cookie que haya establecido en el


objeto HttpResponse antes de que la cookie se enviara al explorador. Sin
embargo, no puede volver a obtener la expiración en el objeto HttpRequest.

Leer colecciones de cookies

Es posible que en algún momento necesite leer todas las cookies disponibles para la página. Para leer los
nombres y los valores de todas las cookies disponibles para la página, puede recorrer la colección Cookies
mediante código como el siguiente.

Visual Basic
Dim i As Integer
Dim output As System.Text.StringBuilder = New
System.Text.StringBuilder

Dim aCookie As HttpCookie


For i = 0 to Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output.Append("Cookie name = " & Server.HtmlEncode(aCookie.Name) _
& "<br />")
output.Append("Cookie value = " & _
Server.HtmlEncode(aCookie.Value) & "<br /><br />")
Next
Label1.Text = output.ToString()

[6]
Nota:

Cuando ejecute este código, es posible que aparezca una cookie


denominada ASP.NET_SessionId. ASP.NET la utiliza para almacenar un
identificador único para la sesión. La cookie de sesión no se conserva en su
disco duro. Para obtener más información sobre las cookies de sesión, vea la
sección "Las cookies y el estado de sesión" más adelante en este tema.

Una limitación del ejemplo anterior es que si la cookie tiene subclaves, la presentación las muestra como una sola
cadena de nombre y valor. Puede leer la propiedad HasKeys de una cookie para determinar si ésta tiene
subclaves. En ese caso, puede leer la colección de subclaves para obtener nombres y valores de subclaves
individuales. Puede leer directamente valores de subclaves de la colección Values por valor de índice. Los
nombres de las subclaves correspondientes están disponibles en el miembro AllKeys de la colección Values, que
devuelve una matriz de cadenas. También puede utilizar el miembro Keys de la colección Values. Sin embargo, la
propiedad AllKeys se almacena en la caché la primera vez que se tiene acceso a ella. Por el contrario, cada vez
que se tiene acceso a la propiedad Keys, ésta crea una matriz. Por este motivo, la propiedad AllKeys es mucho
más rápida en accesos posteriores dentro del contexto de la misma solicitud de página.

En el ejemplo siguiente se muestra una modificación del ejemplo anterior. Se utiliza la propiedad HasKeys para
comprobar la existencia de subclaves y si éstas se detectan, el ejemplo las obtiene de la colección Values:

Visual Basic
Dim i As Integer
Dim j As Integer
Dim output As System.Text.StringBuilder = New StringBuilder()
Dim aCookie As HttpCookie
Dim subkeyName As String
Dim subkeyValue As String
For i = 0 To Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output.Append("Name = " & aCookie.Name & "<br />")
If aCookie.HasKeys Then
For j = 0 To aCookie.Values.Count - 1
subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys(j))
subkeyValue = Server.HtmlEncode(aCookie.Values(j))
output.Append("Subkey name = " & subkeyName & "<br />")
output.Append("Subkey value = " & subkeyValue & _
"<br /><br />")
Next
Else
output.Append("Value = " & Server.HtmlEncode(aCookie.Value) &
_
"<br /><br />")
End If
Next
Label1.Text = output.ToString()

Opcionalmente, puede extraer las subclaves como un objeto NameValueCollection, tal como se muestra en el
ejemplo siguiente:

Visual Basic
Dim i As Integer
Dim j As Integer
Dim output As System.Text.StringBuilder = New StringBuilder()
Dim aCookie As HttpCookie
Dim subkeyName As String
Dim subkeyValue As String

[7]
For i = 0 To Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output.Append("Name = " & aCookie.Name & "<br />")
If aCookie.HasKeys Then
Dim CookieValues As _
System.Collections.Specialized.NameValueCollection = _
aCookie.Values
Dim CookieValueNames() As String = CookieValues.AllKeys
For j = 0 To CookieValues.Count - 1
subkeyName = Server.HtmlEncode(CookieValueNames(j))
subkeyValue = Server.HtmlEncode(CookieValues(j))
output.Append("Subkey name = " & subkeyName & "<br />")
output.Append("Subkey value = " & subkeyValue & _
"<br /><br />")
Next
Else
output.Append("Value = " & Server.HtmlEncode(aCookie.Value) &
_
"<br /><br />")
End If
Next
Label1.Text = output.ToString

Modificar y eliminar las cookies


No es posible modificar directamente una cookie. En su lugar, el proceso que se debe seguir consiste en crear
una nueva cookie con nuevos valores y, a continuación, enviarla al explorador para que sobrescriba la versión
antigua en el cliente. En el ejemplo de código siguiente se muestra cómo modificar el valor de una cookie que
almacena un recuento de las visitas del usuario al sitio:

Visual Basic
Dim counter As Integer
If Request.Cookies("counter") Is Nothing Then
counter = 0
Else
counter = Int32.Parse(Request.Cookies("counter").Value)
End If
counter += 1
Response.Cookies("counter").Value = counter.ToString
Response.Cookies("counter").Expires = DateTime.Now.AddDays(1)

Eliminar las cookies

La eliminación de una cookie, es decir, quitarla físicamente del disco duro del usuario, es una variación del
proceso de modificación. No es posible quitar directamente una cookie, ya que se encuentra en el equipo del
usuario. Sin embargo, puede conseguir que el explorador la elimine. La técnica consiste en crear una nueva
cookie con el mismo nombre que la cookie que se desea eliminar, pero estableciendo su expiración en una fecha
anterior a la actual. Cuando el explorador compruebe la expiración de la cookie, la descartará porque está
anticuada. En el ejemplo de código siguiente se muestra una manera de eliminar todas las cookies disponibles
para la aplicación:

Visual Basic
Dim aCookie As HttpCookie
Dim i As Integer
Dim cookieName As String
Dim limit As Integer = Request.Cookies.Count - 1
For i = 0 To limit
cookieName = Request.Cookies(i).Name
aCookie = New HttpCookie(cookieName)

[8]
aCookie.Expires = DateTime.Now.AddDays(-1)
Response.Cookies.Add(aCookie)
Next

Modificar o eliminar las subclaves

El proceso de modificación de una subclave determinada es igual que el de creación, como se muestra en el
ejemplo siguiente:

Visual Basic
Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString()
Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1)

Para eliminar una subclave determinada, manipule la colección Values de la cookie, que contiene las subclaves.
En primer lugar, obtenga la cookie del objeto Cookies y vuelva a crearla. A continuación, llame al método
Remove de la colección Values y pase al método Remove el nombre de la subclave que desea eliminar. Por
último, agregue la cookie a la colección Cookies para que se envíe otra vez, ya modificada, al explorador. En el
ejemplo de código siguiente se muestra cómo eliminar una subclave. En el ejemplo, el nombre de la subclave
que se desea quitar se especifica en una variable.

Visual Basic
Dim subkeyName As String
subkeyName = "userName"
Dim aCookie As HttpCookie = Request.Cookies("userInfo")
aCookie.Values.Remove(subkeyName)
aCookie.Expires = DateTime.Now.AddDays(1)
Response.Cookies.Add(aCookie)

Las cookies y la seguridad


Los problemas de seguridad relacionados con las cookies son similares a los producidos por recibir datos del
cliente. En una aplicación, las cookies son otro tipo de datos proporcionados por el usuario y, por consiguiente,
están expuestos al examen y a la suplantación. Como mínimo, el usuario puede ver los datos almacenados en
una cookie, ya que ésta se encuentra disponible en el propio equipo del usuario. También puede cambiar la
cookie antes de que el explorador la envíe a su aplicación.

Nunca debería almacenar datos confidenciales en una cookie, por ejemplo nombres de usuario, contraseñas,
números de tarjeta de crédito, etc. Jamás almacene en una cookie nada que no debiera estar en las manos de un
usuario o de alguien que pudiera robar la cookie.

De manera similar, sospeche de la información que obtenga de una cookie. No dé por sentado que los datos son
los mismos que escribió; al trabajar con valores de cookies utilice los mismos elementos de seguridad que con
los datos proporcionados por un usuario en una página Web. En los ejemplos anteriores de este tema se
mostraba la codificación HTML del contenido de una cookie antes de mostrar el valor en una página, tal y como
se haría antes de mostrar cualquier información obtenida de los usuarios.

Las cookies se envían entre el explorador y el servidor como texto sin formato y cualquiera que pueda interceptar
el tráfico Web puede leer la cookie. Si lo desea, puede establecer una propiedad de cookie que hace que ésta
sólo se transmita si la conexión utiliza Secure Sockets Layer (SSL). SSL no impide la lectura ni la manipulación de
la cookie mientras se encuentra en el equipo del usuario, pero impide su lectura mientras se encuentra en
tránsito, dado que la cookie está cifrada. Para obtener más información, vea Procedimientos de seguridad
básicos para aplicaciones Web.

Determinar si un explorador acepta cookies

[9]
Los usuarios pueden configurar su explorador para que rechace las cookies. No se produce ningún error si no se
puede escribir una cookie. De igual modo, el explorador no envía ninguna información al servidor sobre su
configuración de cookies actual.

Nota:

La propiedad Cookies no indica si las cookies están habilitadas. Sólo indica


si el explorador actual admite cookies de forma inherente.

Una manera de determinar si se aceptan las cookies consiste en intentar escribir una cookie y, a continuación,
intentar leerla. Si no puede leer la cookie que ha escrito, debería dar por supuesto que las cookies están
desactivadas en el explorador.

En el ejemplo de código siguiente se muestra cómo podría comprobar si se aceptan las cookies. El ejemplo
consta de dos páginas. La primera página escribe una cookie y, a continuación, redirige el explorador a la
segunda página. La segunda página intenta leer la cookie. A su vez, redirige el explorador otra vez a la primera
página y agrega a la dirección URL una variable de cadena de consulta con los resultados de la prueba.

El código de la primera página tiene esta apariencia:

Visual Basic
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
If Request.QueryString("AcceptsCookies") Is Nothing Then
Response.Cookies("TestCookie").Value = "ok"
Response.Cookies("TestCookie").Expires = _
DateTime.Now.AddMinutes(1)
Response.Redirect("TestForCookies.aspx?redirect=" & _
Server.UrlEncode(Request.Url.ToString))
Else
Label1.Text = "Accept cookies = " & _
Server.UrlEncode(Request.QueryString("AcceptsCookies")
)
End If
End If
End Sub

En primer lugar, la página comprueba si se trata de una devolución de datos; si no es así, busca el nombre de la
variable de cadena de consulta AcceptsCookies que contiene los resultados de la prueba. Si no hay ninguna
variable de cadena de consulta, no se ha finalizado la comprobación, por lo que el código escribe una cookie
denominada TestCookie. Después de escribir la cookie, el ejemplo llama a Redirect para transferir
TestForCookies.aspx a la página de prueba. Se anexa a la dirección URL de la página de prueba una variable de
cadena de consulta denominada redirect que contiene la dirección URL de la página actual; esto permite redirigir
el explorador de nuevo a esta página después de realizar la prueba.

La página de prueba puede contener únicamente código; no es necesario que contenga controles. El ejemplo de
código siguiente muestra la página de prueba.

Visual Basic
Sub Page_Load()
Dim redirect As String = Request.QueryString("redirect")
Dim acceptsCookies As String
If Request.Cookies("TestCookie") Is Nothing Then
acceptsCookies = "no"
Else
acceptsCookies = "yes"

[10]
' Delete test cookie.
Response.Cookies("TestCookie").Expires = _
DateTime.Now.AddDays(-1)
End If
Response.Redirect(redirect & "?AcceptsCookies=" & acceptsCookies,
_
True)
End Sub

Después de leer la variable de cadena de consulta de redirección, el código intenta leer la cookie. Por razones de
mantenimiento, si la cookie existe, se elimina inmediatamente. Cuando finaliza la prueba, el código construye una
nueva dirección URL a partir de la dirección URL pasada en la variable de cadena de consulta redirect. La nueva
dirección URL también incluye una variable de cadena de consulta que contiene los resultados de la prueba. El
último paso consiste en utilizar la nueva dirección URL para redirigir el explorador a la página original.

Una mejora que se podría realizar en el ejemplo sería conservar los resultados de la prueba de la cookie en un
almacén persistente, como una base de datos, para que la prueba no se tenga que repetir cada vez que el
usuario visite la página original. (De forma predeterminada, el almacenamiento de los resultados de la prueba en
el estado de sesión requiere cookies.)

Las cookies y el estado de sesión


Cuando un usuario navega en su sitio, el servidor establece para dicho usuario una sesión única que termina
cuando finalice la visita. En cada sesión, ASP.NET mantiene información de estado de sesión donde las
aplicaciones pueden almacenar información específica del usuario. Para obtener más información, vea el tema
Información general sobre el estado de sesión de ASP.NET.

ASP.NET debe realizar el seguimiento de un id. de sesión para cada usuario con objeto de poder asignar el
usuario a la información de estado de sesión en el servidor. De forma predeterminada, ASP.NET utiliza una cookie
no persistente para almacenar el estado de sesión. Sin embargo, si un usuario ha deshabilitado las cookies en el
explorador, la información de estado de sesión no se puede almacenar en una cookie.

ASP.NET proporciona una alternativa en forma de sesiones sin cookies. Puede configurar su aplicación para que
almacene los identificadores de sesión en las direcciones URL de las páginas de su sitio, en lugar de almacenarlos
en las cookies. Si su aplicación se basa en el estado de sesión, debería tener en cuenta configurarla para que
utilice sesiones sin cookies. Sin embargo, en unos cuantos casos, si el usuario comparte la dirección URL con otra
persona (por ejemplo, para enviar dicha dirección a un colega mientras esté activa la sesión del usuario), es
posible que ambos usuarios terminen compartiendo la misma sesión y los resultados serían impredecibles. Para
obtener más información sobre cómo configurar su aplicación para que utilice sesiones sin cookies, vea el tema
Información general sobre la administración de estados de ASP.NET.

Referencia de clase

HttpCooki Proporciona un método con seguridad de tipos para crear y


e manipular cookies HTTP individuales.
Cookies Obtiene la colección de cookies de respuesta.
Cookies Obtiene una colección de cookies enviada por el cliente.
Referencia:

http://msdn.microsoft.com/es-es/library/ms178194(VS.90).aspx

Aplicación:

[11]
1. Defina con sus palabras que entiende por Cookies?
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
2. Cree una cookie llamada color que almacene el valor de RED, que tenga un
periodo de 5 días y que solamente esté disponible para el dominio itca.edu
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
3. ¿Cuál es la cantidad máxima de cookies que permiten los exploradores web?
_________________________________________________________________
_________________________________________________________________
_________________________________________________________________
4. Escriba la línea de código que permite recuperar la cookie llamada color y
almacenarla en una variable llamada preferencias de tipo string.
_________________________________________________________________
_________________________________________________________________
5. Escriba el código que permite cambiar el valor de cookie llamada color al valor
de GREEN.
_________________________________________________________________
_________________________________________________________________
6. Escriba el código para eliminar la cookie llamada color.
_________________________________________________________________
_________________________________________________________________

Autoevaluación:

Criterio Excelente Muy Bueno Bueno


Defino correctamente que es una cookie
Se crear cookies en asp.net
Se recuperar el valor que almacena una cookie.
Elimino cookies desde el código asp.net
Identifico de forma clara en qué momento puedo hacer uso de cookies

[12]

Potrebbero piacerti anche