Skip to content

Latest commit

 

History

History
120 lines (77 loc) · 7.69 KB

File metadata and controls

120 lines (77 loc) · 7.69 KB

6.1 Sesiónes y cookies

Las Sesiones y las cookies son dos conceptos comunes en la navegación web, también son muy fáciles de entender mal, pero son extremadamente importantes en la autorización y las estadísticos de las páginas. Vamos a comprender los dos.

Suponga que desea rastrear una página con acceso limitado, al igual que la página de inicio del usuario en twitter. Por supuesto, usted puede abrir su navegador y escribir su nombre de usuario y contraseña para iniciar sesión y acceder a los datos, pero lo que llamamos "crawl" significa que usamos un programa para simular este proceso sin intervención humana. Por lo tanto, tenemos que averiguar lo que realmente está sucediendo detrás de nuestras acciones cuando utilizamos el navegador para realizar el login.

Cuando nos registramos en la página, al tipear el nombre de usuario y contraseña y se pulsa el botón "Iniciar sesión", el navegador envía una solicitud POST al servidor remoto. El navegador nos redirige a la página principal después de que el servidor nos devuelve una respuesta correcta. La pregunta es ¿cómo el servidor saber que tenemos derecho a abrir la página con acceso limitado? Debido a que HTTP no tiene estado, el servidor no tiene ninguna manera de saber que pasamos la verificación en la última etapa. La solución más sencilla es anexar el nombre de usuario y contraseña en la URL, funciona pero nos va a dar demasiado trabajo al servidor (al tener que verificar todas las solicitudes en la base de datos), y cuenta con una experiencia de usuario terrible. Así que sólo hay una manera de lograr este objetivo, que es salvar lla información de la identificación, ya sea en el servidor o en el cliente, es por eso que tenemos las cookies y las sesiones.

cookie, en definitiva se trata de un historial de información (incluyendo la información del login) que se guarda en la computadora del cliente y el navegador envía la mismas cookies cuando el usuario visita la próxima vez el mismo sitio web, finaliza automáticamente el paso del login para el usuario.

Figura 6.1 Principios de las cookies.

Las sesiones, en resumen, es la información del historial que se guarda en el servidor, el servidor utiliza el ID de sesión para identificar a las diferentes sesiones, y el identificador de sesión es producido por el servidor, este se debe mantener al azar y único, puede utilizar las cookies para obtener la identidad del cliente, o por la URL como argumentos.

Figure 6.2 Principio de las sesiones.

Cookie

Las Cookies se mantienen por los navegadores y junto con las solicitudes entre los servidores web y los navegadores. Las aplicaciones web pueden acceder a la información en las cookies cuando el usuario visita el sitio. En la configuración del navegador hay una opción acerca de privacidad de las cookies, y de la siguiente manera usted debería ver algo similar cuando las abre:

Figure 6.3 cookies en los navegadores.

Las Cookies tienen tiempo de expiración, y hay dos tipos de cookies según su periodo de vida: cookies de sesión y cookies persistentes.

Si no se establece el tiempo ha expirado, el navegador no las guardará en un archivo local después de cerrar el navegador, se llaman cookies de sesión; este tipo de cookies se suelen guardar en memoria en lugar del sistema de archivos local.

Si establece el tiempo expirado (setMaxAge (60 * 60 * 24)), el navegador guardará esta imagen de la cookie en el sistema de archivos local, y no se eliminará hasta que llegue el tiempo de expirado. Las cookies que se guardan en el sistema de archivos local se pueden compartir en diferentes procesos de los navegadores, por ejemplo, dos ventanas de IE; diferentes tipos de navegadores utilizan diferentes procesos para el manejo de cookies que se almacenan en la memoria.   

Establecer cookies en Go

Go utiliza la función SetCookie en el paquete net/http para configurar las cookies:

	http.SetCookie(w ResponseWriter, cookie *Cookie)

w es la respuesta de la solicitud, cookie es un struct, vamos a ver cómo se ve:

	type Cookie struct {
	    Name       string
	    Value      string
	    Path       string
	    Domain     string
	    Expires    time.Time
	    RawExpires string
	
    	// MaxAge=0 means no 'Max-Age' attribute specified.
	    // MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0'
    	// MaxAge>0 means Max-Age attribute present and given in seconds
	    MaxAge   int
	    Secure   bool
	    HttpOnly bool
	    Raw      string
	    Unparsed []string // Raw text of unparsed attribute-value pairs
	}

Aquí hay un ejemplo de configuración de cookies:

	expiration := *time.LocalTime()
	expiration.Year += 1
	cookie := http.Cookie{Name: "username", Value: "astaxie", Expires: expiration}
	http.SetCookie(w, &cookie)

Optener cookies en Go

El ejemplo anterior muestra cómo configurar las cookies, vamos a ver cómo conseguir las cookies:

	cookie, _ := r.Cookie("username")
	fmt.Fprint(w, cookie)

Aquí hay otra manera de conseguir cookie:

	for _, cookie := range r.Cookies() {
	    fmt.Fprint(w, cookie.Name)
	}

Como se puede ver, es muy conveniente obtener las cookies en la solicitud.

Sesiones

Sesión significa una serie de acciones o mensajes, por ejemplo, las acciones de recoger su teléfono se puede llamar una sesión. Sin embargo, la sesión implícita es orientada a conexiónes o a mantener la conexión cuando está relacionado con el protocolo de red.

La sesión tiene más sentido cuando toca el desarrollo web, lo que significa una solución para mantener el estado de la conexión entre el servidor y el cliente, a veces también significa la estructura de almacenamiento de datos de esta solución.

La sesión es el mecanismo del lado del servidor, el servidor utiliza algo así como (en la actualidad) una tabla hash para guardar la información.

Cuando una aplicación tiene que asignar una nueva sesión para el cliente, el servidor debe comprobar si hay alguna sesión de un mismo cliente con un ID unico de sesión. Si el identificador de sesión ya existe, el servidor sólo devuelve la misma sesiones de cliente, crear una nueva sesión si no hay ninguna para ese cliente (por lo general ocurre cuando el servidor ha borrado el identificador correspondiente de sesión, pero el usuario añada una sesión manualmente).

La sesión en sí, no es compleja, pero su implementación y despliegue son muy complicados, por lo que no se puede utilizar "una forma para gobernarlos a todos".

Resumen

En conclusión, el objetivo de la sesión y de las cookies es la misma, que son a la vez para superar el defecto de HTTP que no tiene estado, pero utilizan diferentes formas. La sesión utiliza cookies para guardar el identificador de sesión en el lado del cliente, y guardar otros datos en el lado del servidor, y la cookie guarda toda la información en el lado del cliente. Así que usted puede notar que la cookie tiene algunos problemas de seguridad, por ejemplo, el nombre de usuario y la contraseña pueden ser descifradas y recogidos por otros sitios.

Aquí hay dos ejemplos:

    1. appA establece cookies inesperadas para appB.
    1. XSS, appA utiliza JavaScript document.cookie para acceder a las cookies de appB.

A través de la introducción de esta sección, usted debe saber los conceptos básicos de las cookies y de las sesiones, comprender las diferencias entre ellas, para que no te mates cuando salgan los bugs. Vamos a obtener más detalles acerca de las sesiones en las siguientes secciones.

Enlaces