【问题标题】:How does ASP.NET track session in multiple browsers/tabs?ASP.NET 如何在多个浏览器/选项卡中跟踪会话?
【发布时间】:2014-09-24 19:26:09
【问题描述】:

ASP.NET Web 应用程序如何跟踪多个浏览器/选项卡中的会话?例如,如果我登录到某个站点,当我打开一个新的浏览器实例时,它知道(或假设)我仍然是同一个用户,因此它是同一个会话,并且在我访问时仍然使用我的凭据新浏览器实例中的站点。但是当我在 IE 中(在文件菜单中)启动新会话时,它会使用一个新会话。

这是如何在 ASP.NET 中完成的,在 IE 中打开一个新会话实际上是做什么的(我的意思是在内部,我知道它将启动一个新会话)? WebForms 和 ASP.NET MVC 是一样的吗?

【问题讨论】:

  • 您指的是哪个菜单项?无论如何,会话是使用 cookie 处理的。
  • @Stijn:在 IE 中,文件菜单中有一个“新会话”菜单项。正如我所读到的,会话可能使用也可能不使用 cookie,但我的问题与 ASP.NET 如何确定新浏览器实例是新的还是现有的会话有关。
  • ASP.NET 没有。选项卡/窗口/会话是否共享会话 cookie 或具有独立集(如今大多数浏览器将在选项卡和窗口之间共享会话 cookie)是浏览器的决定。当单个会话在多个单独的页面上执行操作时,通常会让 ASP.Net 感到困惑。
  • @Damien_The_Unbeliever:你能提供一个来源吗?我希望能够进一步阅读,请将其放在答案中(而不是评论),以便我可以将其标记为答案。

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


【解决方案1】:

如 cmets 中所述,ASP.NET 使用会话 cookie 跟踪您的会话。

根据this post on IEBlog,当您通过File -> New session时,新窗口不会与现有窗口共享会话cookie。这就是您不会在新窗口中登录的原因。

如果您有兴趣,该博客会详细解释什么是会话合并。

【讨论】:

    【解决方案2】:

    我从未见过在 IE 中打开“新会话”!

    您的会话本质上是服务器和浏览器之间的一个 ID(试试看,response.write('Session.SessionID');) - 我为会话保存的这个 ID,直到超时(通常为 20 分钟),如果您使用会话 cookie,然后 cookie 数据以该 ID 存储在服务器内存中,而不是持久 cookie,后者存储为浏览器本地的文本文件,并根据请求发送到服务器。

    对于 ASP.net 身份验证,有一个 AUTH cookie,它可以是持久的 - 您希望即使在新的浏览会话中也能保留登录信息 - 或者不需要,并且每个会话都需要登录。

    http://support.microsoft.com/kb/910443

    对于这个问题,这个会话 ID 会在 IE 中的所有选项卡和浏览实例中持续存在,除非您启动一个新会话,该会话将具有不同的服务器会话 ID,因此会有新的会话详细信息等...

    【讨论】:

    • 感谢您的回复。如果 SO 允许多个答案,我也会将此标记为答案,但 Stijn 已经在 cmets 中为我提供了答案,我只是要求他将其放入答案表格中......不过,谢谢,会投票。
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多