会话存储在哪里?

3
我问我的朋友,会话存储在哪里?是服务器还是浏览器?他说,存储在服务器上。然后我说,“我认为存储在服务器上的东西叫做缓存”。
于是,我去谷歌搜索阅读文章,但没有找到具体正确的答案,在MSDN上也没有具体的答案。

5
在服务器内存中,它存在于每个用户而非缓存中。 - Tim Schmelter
2
我相信阅读文档可以解决这个问题...MSDN有关于会话状态和可用存储的好文章... - Matías Fidemraizer
3个回答

3
通常情况下,会将会话状态保存在服务器的内存中,但也可以使用数据库支持的缓存。它从不被缓存在客户端,因为其中可能包含不应该提供给用户的信息,例如数据库密码。
你可以在MSDN上找到完整的可以保存会话状态的位置列表:
  • InProc 模式将会话状态存储在 Web 服务器的内存中。这是默认设置。
  • StateServer 模式将会话状态存储在名为 ASP.NET 状态服务的独立进程中。这确保了即使 Web 应用程序重启,会话状态也能够得以保留,并且使得会话状态可以在 Web 农场中的多个 Web 服务器之间共享。
  • SQLServer 模式将会话状态存储在 SQL Server 数据库中。这确保了即使 Web 应用程序重启,会话状态也能够得以保留,并且使得会话状态可以在 Web 农场中的多个 Web 服务器之间共享。
  • Custom 模式可以让你指定自定义的存储提供程序。
  • Off 模式可以禁用会话状态。

2
会话本身存储在服务器端。每个访问服务器的浏览器都会从服务器获取唯一的会话 ID。浏览器将此会话 ID 发送到请求同一服务器的每个页面。
因此,在客户端(浏览器)端,仅存储会话 ID 在浏览器 cookie 中。
(这是默认行为,当会话 cookie 在浏览器设置中启用时...还有一种称为“URL 重写”的技术,可将会话 ID 嵌入 URL 查询参数,每次调用服务器时,使应用程序能够工作,即使浏览器会话 cookie 被禁用)
欲了解更多信息,请参阅http://ejvyas.blogspot.in/2010/02/where-is-stored-is-it-in-browser-or-at.html

0

快速答案:在两端都有。

以前,会话是存储在服务器端的。这种方法意味着每次创建或验证会话时都必须访问服务器端。会话还必须被复制到所有Web服务器上。这些事情足以影响性能。

另一种老派的方式是将会话数据存储为Cookie(正如答案中提到的那样)。明显的缺点是Cookie有4kb的限制。

为了克服这个问题,万维网联盟定义了客户端sessionStorage,它可以立即添加或验证,并且不需要在Web服务器之间复制数据。

它可以在浏览器的Dev Tools / Application选项卡中看到。例如,这就是我Facebook页面的会话如何看起来的:

enter image description here


我当然是指客户端。已更新答案。谢谢! - Dzmitry Alifer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接