Skip to content

Commit 8bc6fbb

Browse files
author
ma0
committed
translated first sections in chapter 6
1 parent 0e10e7b commit 8bc6fbb

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed

Diff for: es/06.0.md

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# 6 Almacenamiento de datos y Sesiones
2+
3+
Un tema importante en el desarrollo web es proveer una buena experiencia de usuario, pero el hecho de que HTTP sea un procolo sin estado parece ir en contra de ese espíritu. ¿Cómo podemos controlar el proceso completo de ver sitios a un usuario? La solución clásica es usar sesiones y cookies, donde las cookies sirven como mecanismo del lado del cliente y las sesiones son guardadas en el servidor con un identificador único para cada usuario. Nota que las sesiones puede ser pasadas en la URL, en las cookies o incluso en la base de datos, lo cual es mas seguro, pero puede alterar un poco el rendimiento de la aplicación.
4+
5+
En la sección 6.1 vamos a ablar sobre las diferencias entre cookies y sesiones. En la sección 6.2 aprenderás como usar sesiones en Go con una implementaición de un manejador de sesión. En la sección 6.3 hablaremos como el hijacking de sesiones y como prevernirlo cuando sabes que la sesión puede ser almacenada en calquier lugar. el manejador de sesiones que implementaremos en la sesión 6.3 guardará las sesiones en memoria, pero si queremos expandir la aplicación para permitir sesiones compartidas, es siempre mejor guardar las sesiones en nuestra base de datos. Hablaremos de como hacer esto en la sección 6.4.
6+
7+
## Enlaces
8+
9+
- [Índice](preface.md)
10+
- Capítulo previo: [Capítulo 5 Resumen](05.7.md)
11+
- Siguiente sección: [Sesión y cookies](06.1.md)

Diff for: es/06.1.md

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
## 6.1 Sesiones y cookies
2+
3+
Las sesiones y cookies son dos conceptos muy comunes en la web, y también son muy malentendidos. Sin embargo, son extremadamente importantes para la autorización de páginas, así como para tener información para estadísticas de las páginas. Echémos un vistazo a los dos siguientes casos de uso.
4+
5+
Supón que quieres acceder a una página que tiene acceso restringido al público, como el perfil de twitter de un usuario. Por supuesto que puedes abrir tu navegador y escribir tu usuario y contraseña para acceder a esa información, pero el concepto de "exploración web" significa usar un programa para automatizzar este proceso sin intervención humana. Por consiguiente, tenemos que encontrar que está ocurriendo realmente detrás de bambailnas cuando vamos a usar un navegador para acceder.
6+
7+
Cuando por primera vez recibimos una página de acceso y escribimos un usuario y contraseña, después de presionar el botor de "entrar", el navegador envía una petición POST a un servidor remoto. El servidor redirecciona al usuario a su página de inicio después de verificar la información de acceso y retorna una respuesta HTTP. La pregunta aquí es ¿cómo el servidor sabe quien tiene privilegios de acceso a cierta página? Como HTTP es sin estado el servidor no tiene cómo saber si se ha pasado la verificación en el paso anterior. La solución mas fácil en ingenua es pegar el nombre de usuario y la contraseña en la URL. esto funciona, pero coloca mucha presión en el servidor, porque siempre se debe validar un usuario y una contraseña en la base de datos, y puede hacer que la experiencia de usuario se deteriore. Una alternativa para lograr esta meta es guardar la identidad del usuario en el cliente y el servidor usando cookies y sesiones.
8+
9+
Las cookies, de una manera corta, almacenan información (incluyendo la información de acceso) en el computador del cliente. El navegador envía estas cookies cada vez que el usuario visita el mismo sitio, automáticamente completando el paso de acceso para el usuario.
10+
11+
![](images/6.1.cookie2.png?raw=true)
12+
13+
Figure 6.1 principio de las cookies.
14+
15+
Las sesiones, por otro lado, guardan información histórica en el lado del servidor. El servidor utiliza un identificador de sesión para diferenciar las esiones, y también este identificador es generado por el servidor y debería ser aleatorio y único. Puedes utilizar cookies o argumentos en la URL para obtener la identidad del cliente.
16+
17+
![](images/6.1.session.png?raw=true)
18+
19+
Figura 6.2 principio de las sesiones.
20+
21+
## Cookies
22+
23+
Las cookies son mantenidas por los navegadores. Ellas pueden ser modificadas durante la comunicación entre servidores web y navegadores. Las aplicaciones web pueden acceder a la información de las cookies cuando el usuario visita los sitios correspondientes. La mayoría de navegadores web tienen una configuración para determinar la privacidad de las cookies. Puedes ver algo similar cuando lo abres.
24+
25+
![](images/6.1.cookie.png?raw=true)
26+
27+
Figura 6.3 cookies en navegadores.
28+
29+
Las cookies tiene un tiempo de expiración, y se dividen en dos tipos por su ciclo de vida: las cookies de sesión y las cookies persistentes.
30+
31+
Si tu aplicación no le da a una cookie un tiempo de expiración, el navegador no la guardará en el sistema de almacenamiento después de que el navegador sea cerrado. Estas cookies son llamadas cookies de sesión y son guardadas usualmente en memoria en vez del sistema de almacenamiento permanente.
32+
33+
Si tu aplicación define un tiempo de expiración (por ejemplo, setMaxAge(60*60*24)), el navegador *guardará* esta cookie en el sistema de ficheros, y no la elimninará hasta que se alcance el tiempo de expiración. Las cookies guardadas en el sistema de ficheros pueden ser accedidas por diferentes instancias del navegador, por ejemplo, por dos ventanas de Internet Explorer; diferentes navegadores usan diferentes procesos para manejar las cookies que son guardadas en memoria.
34+
35+
## Definir cookies en Go
36+
37+
Go usa la función `SetCookie` del paquete `net/http` para definir cookies:
38+
```
39+
http.SetCookie(w ResponseWriter, cookie *Cookie)
40+
```
41+
`w` es la respuesta de la petición y es cookie una estructura. Vamos a ver como se ve:
42+
```
43+
type Cookie struct {
44+
Name string
45+
Value string
46+
Path string
47+
Domain string
48+
Expires time.Time
49+
RawExpires string
50+
51+
// MaxAge=0 significa que no esta especificado el atributo 'Max-Age'.
52+
// MaxAge<0 significa elimiar la cookie ahora mismo, equivalente a 'Max-Age: 0'
53+
// MaxAge>0 significa a cantidad de segundos que debe permanecer en memoria la cookie
54+
MaxAge int
55+
Secure bool
56+
HttpOnly bool
57+
Raw string
58+
Unparsed []string // Texto plano con las parejas de atributos sin evaluar
59+
}
60+
```
61+
Aquí está un ejemplo de cookie:
62+
```
63+
expiration := time.Now().Add(365 * 24 * time.Hour)
64+
cookie := http.Cookie{Name: "username", Value: "astaxie", Expires: expiration}
65+
http.SetCookie(w, &cookie)
66+
```
67+
68+
## Obtener cookies en Go.
69+
70+
El ejemplo de arriba muestra como definir una cookie. Ahora vamos a obtener una cookie que ha sido definida:
71+
```
72+
cookie, _ := r.Cookie("username")
73+
fmt.Fprint(w, cookie)
74+
```
75+
Aquí hay otra manera de obtener una cookie:
76+
```
77+
for _, cookie := range r.Cookies() {
78+
fmt.Fprint(w, cookie.Name)
79+
}
80+
```
81+
Como puedes ver, es muy sencillo obtener cookies de las peticiones.
82+
83+
## Sesiones
84+
85+
Una sesión es una serie de acciones o mensajes. Por ejemplo, piensa en las acciones que existen entre contestart el teléfono y colgarlo, esto es un tipo de sesión. Cuando se refiere a protocolo de red, las sesiones tienen que ver con las conexiones entre navegador y servidor.
86+
87+
Las sesiones ayudan a almacenar el estado de la conexión entre servidor y cliente, y esto puede ser en forma de estructuras de datos.
88+
89+
Las sesiones son mecanismos del lado del servidor y usualmente empleaan tablas has (o algo similar) para guardar la información que llega.
90+
91+
Cuando una aplicación necesita asignar una nueva sesión a un cliente, el servidor debe verificar si existen sesiones anteriores del actual cliente con un único identificador de sesión. Si la sesión ya existe, el servidor continúa con la misma sesión al cliente. Por otro lado, si una sesión no existe para el cliente, el servidor crea una nueva sesión (estu usualmente ocurre cuando el servidor ha eliminado el identificador de sesión correspondiente, pero el usuario ha usado la sesión anterior manualmente).
92+
93+
La sesión por si misma no es complicada, pero su implementación y despliegue lo es, así que no puedes usar "una regla que le sirva a todas".
94+
95+
## Resumen
96+
97+
En conclusión, el propósito de las sesiones y cookies es el mismo. Ambas son para superar las conexiones sin estado de HTTP, pero ellas usa diferentes métdos. Las sesiones usan cookies para guardar los identificadores de sesión en el lado del cliente, y guardan toda la demás información del lado del servidor. Las cookies guardan toda la información del lado del cliente. Puedes haber notado que las cookies tienen algunos problemas de seguridad. Por ejemplo, usuarios y contraseñas pueden ser descubiertas y recogidas por sitios web maliciosos de terceros.
98+
99+
Aquí están dos ataques comunes:
100+
101+
1. La aplicación A define una cookie no esperada para la aplicación B.
102+
2. Ataques XSS: la aplicaión utiliza el Javascript `document.cookie` para acceder a las cookies de la aplicación B.
103+
104+
Después de finalizar esta sección, deberías saber algunos conceptos básicos de sesiones y cookies. También entender las diferencias entre ellas, así que no te mates la cabeza cuando los errores emergan. Discutiremos las sesiones en mas detalle en las secciones siguientes.
105+
106+
## Enlaces
107+
108+
- [Índice](preface.md)
109+
- Sección anterior: [Almacenamiento de datos y sesiones](06.0.md)
110+
- Siguiente sección: [Como usar sesiones en Go](06.2.md)

0 commit comments

Comments
 (0)