【问题标题】:Is session stored in client side or server side会话存储在客户端还是服务器端
【发布时间】:2011-10-03 16:24:25
【问题描述】:

我想知道HttpContext.Session 是否使用 cookie 来存储数据。一位同事告诉我,在移动站点中,手机通常没有 cookie,因此您没有会话。我一直认为 session 是存储在服务器端的数据,不依赖于客户端对象,如果我错了请解释一下。

我读过this

【问题讨论】:

    标签: asp.net asp.net-mvc-3


    【解决方案1】:

    在 ASP.NET 中;你有一个会话 cookie。此 cookie 用于识别 哪个 会话是您的;但实际上并不包含会话信息。

    默认情况下,ASP.NET 会将会话信息存储在工作进程 (InProc) 内部的内存中,通常为 w3wp.exe。还有其他存储会话的模式,例如 Out of Proc 和 SQL Server。

    ASP.NET 默认使用 cookie;但如果你真的需要,可以配置为“无cookie”;而是将您的会话 ID 存储在 URL 本身中。这通常有几个缺点;例如链接的维护变得困难,人们用过期的会话 ID 为 URL 添加书签(因此您需要处理过期的会话 ID 等)。大多数现代手机,甚至是非智能手机,都支持 cookie。旧手机可能不会。是否需要支持无 cookie 会话取决于您。

    如果您的网址如下所示:

    http://www.example.com/page.aspx

    无 cookie 的 URL 如下所示:

    http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/page.aspx

    lit3py55t21z5v55vlm25s55 是一个会话 ID。

    您可以了解更多关于 ASP.NET 的会话状态here

    【讨论】:

    • 那么如果您从浏览器中清除 cookie,当您重用页面时会发生什么(就孤立/新会话/现有会话参数而言)?
    【解决方案2】:

    会话数据存储在服务器上,但它还在 cookie 中存储了一个 id 字符串以识别用户。

    如果不支持cookies,则无法存储id字符串,当用户再次请求时服务器无法配对会话。

    会话 ID 只是服务器生成的一个数字(来自计数器或随机),因此它不包含来自您存储在会话对象中的数据的任何信息。

    (也可以将应用程序配置为将会话放在 URL 中而不是 cookie 中。这使您可以使用没有 cookie 的会话,但它会破坏您的漂亮 URL。)

    【讨论】:

    • 如何配置我的应用程序来执行此操作(url 中的会话?)
    • @user351709:您在sessionState 文件的sessionState 部分使用cookiless="true"msdn.microsoft.com/en-us/library/h6bb9cz9.aspx
    • 既然这个问题是关于 ASP 的,那么同样的原理可以应用到 PHP 上吗?您的回答让我了解了会话的工作原理,但我不确定这个概念是否全面,而不仅仅是 ASP 特定的。
    【解决方案3】:

    现在两者都可以。

    服务器会话

    服务器端会话已在其他帖子中进行了解释。会话存储在服务器上,但它需要一个 cookie 来存储谁在请求会话值的指示符。

    客户会话

    W3C 定义的 WebStorage 新概念展示了现在需要客户端会话的方式。 这是 WebStorage 的 HTML5 实现: https://code.google.com/p/sessionstorage/

    【讨论】:

    • 对于试图减少服务器工作量的人来说,客户端会话是个好主意。
    【解决方案4】:

    在某些方面这是一个棘手的问题,因为它兼而有之。

    会话状态本身存储在服务器上。但是,您需要在客户端上使用某种类型的指标才能使用它。通常,这是一个服务器 cookie,它非常薄,基本上是会话的 GUID,仅此而已。但是,您可以设置站点以在 URI 中传递会话 ID,因此它不必是 cookie。

    不确定手机如何处理会话 cookie 概念,但由于我可以登录,并且在 URI 中看不到 ID,因此我假设存在一种机制,即使它不处理用户 cookie。

    【讨论】:

      【解决方案5】:

      会话 ID 默认存储为 cookie。您还可以将会话配置为将其 id 作为查询参数(“cookieless”)传递。

      【讨论】:

        猜你喜欢
        • 2015-11-04
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 2020-07-18
        • 2011-04-30
        相关资源
        最近更新 更多