Tengo una aplicación ASP.NET ejecutándose en un servidor en California. La hora actual del servidor es:
Bob está conectado a mi servidor. Bob está en Texas. Su hora actual es:
Mi aplicación crea una cookie y establece su fecha de caducidad.
var name = "MyName"; var value = "MyValue" var hoursToLive = 24; var myCookie = new HttpCookie(name ) { Value = value, Expires = DateTime.Now.AddHours(hoursToLive) };¿Caducará la cookie en 24 horas o caducará en 22 horas debido a la diferencia horaria entre Bob y el servidor? Sé que DateTime.Now usa la hora local del servidor , pero no tengo claro cómo los navegadores deciden que una cookie ha caducado (específicamente, qué zona horaria se usa para determinar el vencimiento).
Las cookies incluyen información de la zona horaria con el encabezado de expires (principalmente GMT), lo que hace que sea muy sencillo para el cliente hacer frente a la diferencia con la zona horaria real del servidor.
Ejemplo: expires=Mon,20-Jul-2015 22:00:00 GMT si 2015-07-20 14:00:00 UTC-8 es la hora del servidor. Cuando el cliente o el servidor decida si la cookie ha caducado o no, la comparará con la hora GMT asociada.
Profundicé más en el código de System.Web.HttpCookie y encontré el código relevante en GetSetCookieHeader() :
if (_expirationSet && _expires != DateTime.MinValue) { s.Append("; expires="); s.Append(HttpUtility.FormatHttpCookieDateTime(_expires)); } Donde HttpUtility.FormatHttpCookieDateTime() devuelve una marca de tiempo UTC (sin compensación, lo que no importa porque la compensación sería cero).
La hora del meridiano de Greenwich (GMT) y la hora universal coordinada (UTC) pueden, para la mayoría de los propósitos, considerarse iguales. Puedes leer más sobre esto aquí .