服务器端处理会话时是否需要过期会话cookie?


5

Cookie中的唯一数据是会话ID。在创建它时没有设置过期时间戳,会话总是在服务器端进行评估以确定它是否已过期。

注销时,会话被销毁在服务器端。有没有什么时候在过期的cookie?

7

告诉浏览器过期cookie只是一种形式方便,因为用户总是能够覆盖它。毕竟,这个cookie实际上是他的浏览器,所以你会经常检查服务器端会话的到期时间。

也就是说,我仍然建议在cookies上设置一个失效日期。这是用户浏览器中的一条信息,当不再需要时,告诉浏览器摆脱它不失为一个好主意。

+1

我恭敬地不同意。当你“告诉浏览器摆脱它”时,你也告诉它在用户关闭浏览器(直到经过一段时间)之后**保持**。如果用户没有点击注销按钮,这会带来自身的安全风险。请参阅下面的答案。 20 12月. 132013-12-20 20:53:18


2

尽管它不构成直接风险,但我仍然会过期。这只是一个额外的代码行,所以为什么不呢。


0

不,实际上它是有害的。

从技术上讲,您不能过期会话cookie--当您设置到期日期时,它将变为persistent cookie

我想你的意思是问“最好是将会话ID存储在会话cookie或永久cookie中?”我会推荐一个会话cookie,因为它只保存在内存中,并在用户关闭浏览器时从cookie jar中删除。如果您使用永久性cookie,则它将存储在文件系统中,直到它过期或直到用户单击注销按钮 - 它们有时会被忘记为止。持久性cookie会持续一段时间,这意味着恶意用户可能会在一会儿后过来,打开浏览器并恢复用户的会话。

  0

让我猜,你是一个PHP(或.Net)开发人员,对不对? 20 12月. 132013-12-20 23:20:03

  0

据我所知,无论服务器技术如何,cookie的“expires”属性对所有浏览器都是通用的。 ASP.NET + MVC如果你必须知道。 20 12月. 132013-12-20 23:37:16

+1

日期可以在过去被设置**的地方设置**。只有当它被设置,它可以没有日期,因此它将充当会话cookie。如果您不相信浏览器将其删除,您可以将cookie值设置为其他值,例如空字符串。 21 12月. 132013-12-21 13:37:38

  0

您不应该假设用户将单击注销按钮(如果您希望服务器过去设置日期,则必须按此按钮),也不应该假定您可以让浏览器执行此操作 - 不可靠。哎呀,用户可能甚至没有启用脚本。所以是的,“你”可以在过去设置一个cookie的日期,但“你”不会亲自到那里,并且你不能指望服务器或浏览器在你不在的时候这样做。 21 12月. 132013-12-21 23:07:49