【问题标题】:Does the same session continue相同的会话是否继续
【发布时间】:2011-03-09 20:01:24
【问题描述】:

当用户使用 Firefox 从计算机“A”登录时,是继续同一会话还是为同一“用户”创建新会话。

据我了解,“服务器为该用户创建了一个会话”。

现在,用户无需关闭浏览器选项卡,即可打开一个新选项卡并转到同一页面 [需要用户先登录]。

会发生什么?

服务器会继续相同的会话,让代码识别用户吗?

服务器会为此请求启动新会话并销毁旧会话吗?

考虑同样的问题,但现在用户从另一个浏览器登录。会发生什么?

【问题讨论】:

  • 大声笑,不在家工作,这是为了增加基本的理解
  • 谢谢所有答案都有帮助,但遗憾的是只能将一个标记为答案

标签: c# asp.net session


【解决方案1】:

会话不会在浏览器之间共享,并且仅在从当前页面生成新选项卡/窗口时才在选项卡(或窗口)之间共享(除非通过查询字符串处理无 cookie 会话)。当您单击链接并说在新选项卡或窗口中打开或选择复制当前选项卡/窗口时,两个选项卡/窗口将共享同一个会话。这取决于浏览器,每个浏览器都可以以不同的方式实现它。

这很容易测试。使用Label 和返回当前页面的链接创建一个简单的aspx 页面。在PageLoad 中执行以下操作:

if (Session["Test"] != null)
{
    Session["Test"] = (int)(Session["Test"]) + 1;
}
else
{
    Session["Test"] = 1;
}

yourLabel.Text = Session["Test"].ToString();

然后使用不同的方法打开页面。使用hreftarget=_blank。 href 将创建一个新选项卡/窗口并共享会话,但不应以任何其他方式加载页面。

【讨论】:

    【解决方案2】:

    会话基于存储会话 ID 的 cookie。因此,这纯粹是浏览器如何存储它的 cookie 的问题。

    一般情况下,浏览器在标签页之间共享 cookie,因此对于新标签页,会话 ID 会被保留,不会创建新会话。

    但是,两个不同的浏览器不共享 cookie,因此在另一个浏览器中会创建新会话。

    还有无 cookie 会话。在这种情况下,会话 ID 存储在 URL 中(例如http://www.server.com?sessionId=12345)。所以很明显,在这种情况下,如果您打开一个新选项卡并键入不带 sessionId 的地址,也会创建一个新选项卡。

    【讨论】:

      【解决方案3】:

      如果是新标签,则将使用相同的会话(因为浏览器将提供相同的会话 cookie)。如果它是不同的浏览器,则 cookie 将不存在,并且将启动一个新会话(假设您使用标准会话机制,其他浏览器中的会话将持续存在)。

      【讨论】:

        【解决方案4】:

        这真的完全取决于网站编程。但通常你可以看到标签共享会话,但不同的浏览器看不到。

        【讨论】:

          【解决方案5】:

          会话通常不会跨浏览器持续存在。如果用户打开一个新选项卡并返回登录页面并再次登录,或者他是否自动登录,这一切都取决于后端代码的编写方式。

          【讨论】:

            【解决方案6】:

            用户会话通常保存在由 Web 服务器创建的 cookie 中,但实际上存储在客户端上。如果两个 Firefox 选项卡共享 cookie,会话将在它们之间共享。但是,如果两个选项卡不共享 cookie,则会为每个选项卡创建一个服务器会话。

            【讨论】:

              猜你喜欢
              • 2011-03-03
              • 1970-01-01
              • 1970-01-01
              • 2012-04-24
              • 1970-01-01
              • 1970-01-01
              • 2013-03-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多