【问题标题】:ASP.NET session vs session state and cookies vs cookie lessASP.NET 会话与会话状态和 cookie 与 cookie 少
【发布时间】:2015-07-23 05:59:39
【问题描述】:
请帮我看看我的理解是否正确。
ASP.NET 会话存储在 Web 服务器上,不使用任何 cookie。
如果 ASP.NET 配置为使用带有 webconfig->会话状态的会话:那么我们可以将其配置为 stateconnection 或 sqlconnection。
如果 ASP.NET 配置为使用会话状态(作为 stateconnection 或作为 sqlconnection),那么当用户在代码中使用会话时,将使用客户端计算机上的 cookie,除非您在 webconfig 中指定 cookieless=true
如果我们使用<sessionState cookieless="true" />,那么默认状态连接设置为localhost
【问题讨论】:
标签:
asp.net
session
session-state
【解决方案1】:
当在许多动态网站中谈论 Session 时,您希望在 HTTP 请求之间存储用户数据(因为 http 是无状态的,并且您不能以其他方式将请求与任何其他请求相关联),但是您不希望该数据在客户端可读/可编辑,因为您不希望客户端在不通过您的(服务器端)代码的情况下使用该数据。
解决方案是存储该数据服务器端,给它一个“id”,并让客户端只知道(并在每个 http 请求时传回)该 id。好了,会话实施了。或者您可以将客户端用作方便的远程存储,但您会加密数据并将秘密保存在服务器端。
当然还有其他方面需要考虑,比如你不希望人们劫持其他人的会话,你希望会话不是永远持续而是过期等等。
会话状态包含与服务器的特定会话(由特定客户端/浏览器/机器)有关的信息。这是一种跟踪用户在网站上所做的事情的方法......跨多个页面......在网络的无状态中。例如特定用户购物车的内容是会话数据。 Cookie 可用于会话状态。
Cookies 是一小段文本,存储在客户的计算机上,仅供设置 Cookie 的网站使用。这允许 web 应用程序为用户保存信息,然后在需要时在每个页面上重新使用它。
每个会话都会有 SessionID。会话 ID 是一个唯一编号,服务器在特定用户访问(会话)期间分配给他。并且默认情况下,会话 ID 附加到 cookie,并且该 cookie 将在其请求/响应期间从客户端共享到服务器(以及服务器到客户端)。服务器将根据从 cookie 中检索到的会话 id 来识别会话。
关于cookieless,如果您的浏览器不支持cookie 或禁用,则将使用cookieless。由于是 Cookieless,asp.net 无法创建 cookie 来保存会话 id。相反,会话 ID 将在查询字符串中传递。
【解决方案2】:
Session : 存储在服务器(内存或数据库)上,Web 应用程序中的所有页面都可以使用其中的数据。
会话状态:当用户在 Web 应用程序中导航页面时,为用户存储和检索值。
Cookies :作为包含非敏感数据的文件存储在客户端,但包含用户收藏和偏好等数据。
无Cookie:在 URL 查询字符串中传递会话 ID,而不是将其存储在 cookie 中,以防您希望用户阻止或删除 cookie。