aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/http/headers/set-cookie/index.html
blob: 8b6216118cf74a3f83dc32ba63ced086cea8f0fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
---
title: Set-Cookie
slug: Web/HTTP/Headers/Set-Cookie
tags:
  - Cookies
  - HTTP
  - Referencia
  - Respuesta
  - encabezado
  - samesite
translation_of: Web/HTTP/Headers/Set-Cookie
---
<div>{{HTTPSidebar}}</div>

<div></div>

<div>La cabecera de respuesta HTTP <strong>Set-Cookie</strong> se usa para enviar cookies desde el servidor al agente de usuario, así el agente de usuario puede enviarlos de vuelta al servidor.</div>

<div></div>

<div>Para más información, visite la <a href="/es/docs/Web/HTTP/Cookies">guía para cookies HTTP</a>.</div>

<div></div>

<table class="properties">
 <tbody>
  <tr>
   <th scope="row">Tipo de cabecera</th>
   <td>{{Glossary("Response header", "Respuesta del encabezado")}}</td>
  </tr>
  <tr>
   <th scope="row">{{Glossary("Forbidden header name", "Nombre prohibido del encabezado")}}</th>
   <td>no</td>
  </tr>
 </tbody>
</table>

<h2 id="Sintaxis">Sintaxis</h2>

<pre class="syntaxbox notranslate">Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; Expires=&lt;date&gt;
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; Max-Age=&lt;non-zero-digit&gt;
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; Domain=&lt;domain-value&gt;
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; Path=&lt;path-value&gt;
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; Secure
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; HttpOnly

Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; SameSite=Strict
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; SameSite=Lax
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; SameSite=None

// Es posible usar múltiples directivas, por ejemplo:
Set-Cookie: &lt;cookie-name&gt;=&lt;cookie-value&gt;; Domain=&lt;domain-value&gt;; Secure; HttpOnly
</pre>

<h2 id="Directivas">Directivas</h2>

<ul>
 <li>Si se omite, se define el húesped como la URL del documento actual, sin incluir subdominios.</li>
 <li>Contrario a la especificación anterior, puntos principales en el nombre del domino (<code>.ejemplo.com</code>) son ignorados.</li>
 <li>Si un dominio <em>es</em> especificado, los subdominios son también incluidos.</li>
</ul>

<ul>
 <li>If omitted, defaults to the host of the current document URL, not including subdomains.</li>
 <li>Contrary to earlier specifications, leading dots in domain names (<code>.example.com</code>) are ignored.</li>
 <li>If a domain <em>is</em> specified, subdomains are always included.</li>
</ul>

<dl>
 <dt><code>&lt;cookie-name&gt;=&lt;cookie-value&gt;</code></dt>
 <dd>Una cookie comienza con un par nombre-valor:
 <ul>
  <li>Un <code>&lt;cookie-name&gt;</code> puede ser cualquier cosa excepto caracteres de control (CTLs) o espacios y tabulaciones. Tampoco debe contener caracteres de separación como los siguientes: <code>( ) &lt; &gt; @ , ; : \ " /  [ ] ? = { }</code>.</li>
  <li>Un <code>&lt;cookie-value&gt;</code> opcionalmente puede ser establecido dentro de comillas dobles y se permite usar cualquier caracter US-ASCII excluyendo CTLs, espacios en blanco, comillas dobles, comas, punto y coma y la barra invertida. <strong>Codificación:</strong> Muchas implementaciones realizan codificación de URL sobre los valores de la cookie, aunque esto no es requerido por la especificación RFC. Esto ayuda a satisfacer los requerimientos sobre los caracteres permitidos para &lt;cookie-value&gt;.</li>
  <li><strong><code>Prefijo __Secure-</code></strong>: Las cookies cuyo nombre comience por <code>__Secure-</code> (los guiones forman parte del prefijo) deben ser establecidas con la bandera <code>secure </code>y deben provenir de una página segura (HTTPS).</li>
  <li><strong><code>Prefijo __Host-</code></strong>: Las cookies cuyo nombre comience por <code>__Host-</code> deben ser establecidas con la bandera <code>secure</code>, provenir de una página segura (HTTPS), no deben tener especificado un dominio (y por tanto no son enviadas a subdominios) y la ruta debe ser "/".</li>
 </ul>
 </dd>
 <dt>Expires=&lt;date&gt; {{optional_inline}}</dt>
 <dd>
 <p>El tiempo de vida máximo útil de una cookie como marca HTTP-date timestamp. Ver {{HTTPHeader("Date")}} para el detalle del formato.</p>

 <p>Si no está especificado, la cookie tendrá el tiempo de vida de una <strong>session cookie. </strong>Una sesión finaliza cuando el cliente lo culmina, esto quiere decir que la sesión será removida en ese punto.</p>

 <div class="blockIndicator warning">
 <p><strong>Advertencia:</strong> Sin embargo, muchos navegadores web tiene una caracteristica llamada "restaurar" que almacenará todas tus pestañas para tenerlas lista cuando el navegador sea usado nuevamente. Las cookies de sesión tambien estarán presentes como si nunca se hubiera cerrado el navegador.</p>
 </div>
 Cuando una fecha de Expires es definida, la fecha límite es relativa al <em>cliente </em>donde la cookie se define, no en el servidor.</dd>
 <dt><code>Max-Age=&lt;non-zero-digit&gt;</code> {{optional_inline}}</dt>
 <dd>Número de segundos hasta que la cookie expire. Un cero o un número negativo hace expirar la cookie inmediatamente. Los navegadores antiguos (ie6, ie7, and ie8) no soportan max-age. Para otros navegadores, si ambos estan definidos (<code>Expires</code> y <code>Max-Age</code>), <code>Max-Age</code> tendrá mayor importancia.</dd>
 <dt><code>Domain=&lt;domain-value&gt;</code> {{optional_inline}}</dt>
 <dd>Anfitriones donde la cookie será enviada.
 <ul>
  <li>Si se omite, por defecto el huésped es la URL del documento actual, sin incluir subdominios.</li>
  <li>Contraria a anteriores especificaciones, los puntos principales en nombres de dominio (<code>.example.com</code>) son ignorados.</li>
  <li>Si un dominio <em>es</em> especificado, los subdominios son siempre incluídos.</li>
 </ul>
 </dd>
 <dt><code>Path=&lt;path-value&gt;</code> {{optional_inline}}</dt>
 <dd>Una ruta que debe existir en la URL solicitada, o el navegador no enviará el encabezado <code>Cookie</code>.</dd>
 <dd>El caracter diagonal (<code>/</code>) es interpretado como un separador de directorios y subdirectorios que serán también comparados: para <code>Path=/docs</code>, <code>/docs</code>, <code>/docs/Web/</code>, y <code>/docs/Web/HTTP</code> todos tendrán que coincidir.</dd>
 <dt id="Secure"><code>Secure</code> {{optional_inline}}</dt>
 <dd>Una cookie segura es sólo enviada al servidor cuando una petición es enviada con el esquema <code>https:</code>. (Sin embargo, información confidencial nunca debería ser almacenada en Cookies HTTP, como todo el mecanismo es  However, confidential information should never be stored in HTTP Cookies, ya que todo el mecanismo es inherentemente inseguro y no encripta ninguna información.)
 <p class="note"><strong>Nota:</strong> Sitios inseguros (<code>http:</code>) no puenden almacenar directivas "seguras" apartir de Chrome 52+ y Firefox 52+.</p>
 </dd>
 <dt id="HttpOnly"><code>HttpOnly</code> {{optional_inline}}</dt>
 <dd>Impide que el código JavaScript acceda a la cookie. Por ejemplo, a través de la propiedad {{domxref("Document.cookie")}}, y la API {{domxref("XMLHttpRequest")}}, o la API {{domxref("Request")}}. Esto mitiga los ataques contra scripts cross-site ({{Glossary("XSS")}}).</dd>
 <dt id="SameSite"><code>SameSite=&lt;samesite-value&gt;</code> {{optional_inline}}</dt>
 <dd>
 <ul>
  <li><code>Strict</code></li>
  <li><code>Lax</code></li>
  <li><code>None</code></li>
 </ul>

 <p>Afirma que una cookie no debe ser enviada con peticiones cruzadas, proveiendo alguna protección contra ataques de falsificación de solicitudes cruzadas ({{Glossary("CSRF")}}).</p>

 <p class="note">Los navegadores haciendo migraciones para que el comportamiento por defecto de las cookies en lugar de <a href="https://www.chromestatus.com/feature/5088147346030592">default sea <code>SameSite=Lax</code></a>. Si una cookie necesita ser enviada en peticiones cruzadas, se tiene que optar por no restringir el mismo sitio (SameSite) usando la directiva <code>None</code>. La directiva <code>None</code> requiere el atributo <a href="#Secure"><code>Secure</code></a>.</p>
 </dd>
</dl>

<h2 id="Ejemplos">Ejemplos</h2>

<h3 id="Session_cookie">Session cookie</h3>

<p>Las <strong>cookies de sesión</strong> son removidas cuando el cliente se apaga. Las cookies son cookies de sesión si no se especifican las directivas <code>Expires</code> o <code>Max-Age</code>.</p>

<pre class="notranslate">Set-Cookie: sessionId=38afes7a8</pre>

<h3 id="Permanent_cookie">Permanent cookie</h3>

<p>En lugar de expirar cuando el cliente se cierra, las <strong>cookies permanentes</strong> expiran en una fecha especifica (<code>Expires</code>) o después de una longitud de tiempo determinado (<code>Max-Age</code>).</p>

<pre class="notranslate">Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT
</pre>

<pre class="notranslate">Set-Cookie: id=a3fWa; Max-Age=2592000</pre>

<h3 id="Invalid_domains">Invalid domains</h3>

<p>Una cookie para un dominio que no incluya el servidor que la defina <a href="https://tools.ietf.org/html/rfc6265#section-4.1.2.3">debería ser rechazada por el agente de usuario</a>.</p>

<p>La siguiente cookie sera rechazada si se define por el servidor ubicado en <code>originalcompany.com</code> como:</p>

<pre class="notranslate">Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk</pre>

<p>Una cookie para el subdomino del dominio actual será rechazada.</p>

<p>La siguiente cookie sera rechazada si el servidor anfitrión en <code>example.com</code> la define como:</p>

<pre class="notranslate">Set-Cookie: sessionId=e8bb43229de9; Domain=foo.example.com</pre>

<h3 id="Cookie_prefixes">Cookie prefixes</h3>

<p>Los nombres de las cookies prefijadas con <code>__Secure-</code> o <code>__Host-</code> pueden ser solo usadas si son definidas con la directiva <code>secure</code> desde un origen (HTTPS) seguro.</p>

<p>Además, cookies con el prefijo <code>__Host-</code> deben tener una ruta de <code>/</code> (significando cualquier ruta del huésped) y no debe tener un atributo <code>Domain</code>.</p>

<div class="blockIndicator warning">
<p>Para clientes que no implementan prefijos para las cookies, no se puede contar con que estas garantías adicionales, y las cookies prefijadas sean aceptadas.</p>
</div>

<pre class="notranslate">// Ambas aceptadas al venir de un origen seguro (HTTPS)
Set-Cookie: __Secure-ID=123; Secure; Domain=example.com
Set-Cookie: __Host-ID=123; Secure; Path=/

// Rechazada por faltar la directiva Secure
Set-Cookie: __Secure-id=1

// Rechazada por faltar la directiva Path=/
Set-Cookie: __Host-id=1; Secure

// Rechazada por definir un dominio
Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com
</pre>

<h2 id="Especificaciones">Especificaciones</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Especificación</th>
   <th scope="col">Título</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{RFC("6265", "Set-Cookie", "4.1")}}</td>
   <td>Mecanismo de gestión del estado HTTP</td>
  </tr>
  <tr>
   <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05">draft-ietf-httpbis-rfc6265bis-05</a></td>
   <td>Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies</td>
  </tr>
 </tbody>
</table>

<h2 id="Compatibilidad_de_los_navegadores">Compatibilidad de los navegadores</h2>

<p>{{Compat("http.headers.Set-Cookie", 5)}}</p>

<h2 id="Notas_de_compatibilidad">Notas de compatibilidad</h2>

<ul>
 <li>Empezando con Chrome 52 y Firefox 52, sitios inseguros (<code>http:</code>) no pueden definirse cookies con la directiva 'secure'.</li>
</ul>

<h2 id="Ver_también">Ver también</h2>

<ul>
 <li><a href="/en-US/docs/Web/HTTP/Cookies">HTTP cookies</a></li>
 <li>{{HTTPHeader("Cookie")}}</li>
 <li>{{domxref("Document.cookie")}}</li>
</ul>