【问题标题】:Cookies, server time vs client timeCookies,服务器时间与客户端时间
【发布时间】:2013-12-19 08:44:41
【问题描述】:

我这里有一个很奇怪的案例

答:

  1. 我使用 System.DateTime.Now.AddSeconds(30) 设置我的 cookie 到期日期
  2. 客户端 PC 日期时间比服务器日期时间快 1 小时

场景 1:

  • 使用谷歌浏览器尝试网页
  • 网页以 CLIENT 日期时间设置 cookie 的到期日期
  • 如果客户端日期时间慢于服务器日期时间也没有问题

场景 2:

  • 使用 Internet Explorer 尝试网页
  • 网页采用SERVER日期时间设置cookie的过期日期,但由于客户端日期时间比服务器日期时间快1小时,cookies立即过期。
  • 如果将客户端日期时间更改为与服务器日期时间相同或更慢,则问题已解决。

乙:

  1. 通过使用 javascript 和 ASP:hiddenField 获取客户端日期时间来设置 cookie
  2. 客户端 PC 日期时间比服务器日期时间快 1 小时

场景 1:

  • 列表项
  • 使用谷歌浏览器尝试网页
  • 没问题。
  • 但如果客户端日期时间比服务器日期时间慢,cookie 会立即过期

场景 2:

  • 使用 Internet Explorer 尝试网页
  • 无论客户端日期时间比服务器日期时间快还是慢都没有问题

有什么建议可以解决这个问题吗?过去两周一直困扰着我:(

P/S:服务器时间为 +8 GMT。我的客户端也是 +8 GMT 但快了 1 小时

【问题讨论】:

  • 你用这个cookie做什么?

标签: c# asp.net cookies


【解决方案1】:

请不要使用客户端日期时间,这可能是错误的。在您的情况下,最好的办法是使用 UTC 日期时间而不是客户端或服务器日期时间,因为 UTC 时间在任何地方都是相同的。

使用System.DateTime.UTCNow.AddSeconds(30)

在 javascript 中,如果需要,使用 UTC 日期,例如:

var isoDate = new Date('yourdatehere').toISOString();

【讨论】:

  • 我读到的是客户端计算机认为 UTC 是在其他时间(提前一个小时),不是它是不同的时区。不过,总的来说,这可能是一个很好的建议(或者只是将服务器设置为 UTC)。
  • 这可能是 Javascript 中的一种情况,但在 C# 代码中 System.DateTime.UTCNow 总是可以正常工作。
  • 您好,感谢您的意见。我尝试使用 UTC 时间,但我的 IE 仍然无法登录 :( cookie 立即过期。
  • 服务器时间为 +8 GMT。我的客户端也是 +8 GMT 但快了 1 小时
  • 只是好奇你为什么在这么短的时间内使用cookies,通常持久cookies用于更大的时间范围,如一天或一周,小时间段的一般方法是使用会话超时30 秒(或所需的时间值)并在会话超时时删除所有 cookie。
猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 2013-11-16
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多