据我所知,对于HTTP,有两种方法可以存储属于客户端的数据,并将某种状态带入无状态的浏览器网络容器连接:1)存储在客户端cookie中的数据-或2)存储在cookie中的会话ID和存储在服务器端网络容器中的相关数据。当我比较这两种可能性时,我想不出一个原因,为什么应该走第一条路。但是,当我查看浏览器的cookie时,我仍然会看到其中存储了大量数据。
- 网络容器(如tomcat)可以将任意数据与会话id一起存储——cookie的大小非常有限
- Cookie更容易受到攻击,因为它们存储在客户端。在我看来,将数据保存在服务器端更安全
- Cookie和webcontainer会话都可以定义到期日期
- 浏览器和webcontainer都会在重新启动时保留它们的数据
有人能想出一个使用cookie存储会话数据有好处甚至是必要的方案吗?
仅依赖会话的问题是,为了限制服务器的内存使用,必须在一段时间后清除会话数据,例如ASP.NET默认为20分钟。
因此,如果你的网站的用户必须登录,并且你想给他们一个"记住我"的选项,如果你为此目的使用会话,你的用户将在一段时间后注销。
实现这一点的最简单方法是存储一个过期日期遥远的加密cookie,这样用户就可以在以后进行身份验证。
话虽如此,为了允许用户远程结束会话,Gmail和Facebook等网站并不完全依赖cookie值进行身份验证,但它们可能会为这些会话而不是通用会话使用特殊存储。