【问题标题】:Maintaining same session after browser closes and reopens浏览器关闭并重新打开后保持相同的会话
【发布时间】:2013-01-09 22:40:21
【问题描述】:

我是 asp.net 的新手。我登录该站点并为用户 ID 创建了会话,将此会话视为 s1。 添加 cookie (c1) 到客户端站点,有效期为 3 天。

假设如果我在没有注销的情况下关闭浏览器并再次使用相同的 url,那么我发现会话为空,但我得到了 cookie (c1),然后我创建了一个新会话。但是会话 s1 仍然占用服务器上的内存。意味着这次两个会话在同一台服务器上占用内存。

我想将会话 s1 与 cookie (c1) 一起使用 - 可以吗?或者如果第二次请求到来,我想删除会话 s1。

我使用的代码是:

 if (Session["UserInfo"] != null)
    {
      // code 
    }
    else
    {
        HttpCookie HT = Request.Cookies["User"];
        if (HT != null)
        {
           Session["UserInfo"] = HT["UserName"]; //Here new session is created while previous is already exist on server
        }
        else
        {
           //code
        }
    }

【问题讨论】:

  • 您能提供更多信息吗?您正在使用哪种会话(InProc、Sql、状态服务)?您确定您正在谈论的cookie是与会话相关的,而不是身份验证cookie吗?通常你设置会话服务器端超时,客户端cookie在浏览器关闭时过期。
  • 我正在使用 inproc 会话。在这里我明确地为下次登录创建 cookie,我想重用服务器内存,因为会话已经在服务器上创建,为什么我应该再次创建新会话。

标签: asp.net session


【解决方案1】:

IE 在每个请求上生成一个新的会话 ID。因此,当您关闭浏览器时,旧的会话 ID 会丢失,因此浏览器会发送带有新会话 ID 的请求。这就是为什么你无法获得会话的价值。

但在服务器上它占用服务器内存,会话超时后由服务器清除。

Firefox 在每个请求上发送具有相同会话 ID 的请求,即使您关闭浏览器选项卡,您也可以获得会话 ID。

【讨论】:

  • 会话 ID 由服务器创建,而不是客户端(浏览器)。
  • 会话的概念完全是服务器端的。
【解决方案2】:

带有表单身份验证的典型 ASP 配置 cookie:

.ASPXFORMSAUTH 过期:30 分钟 ASP.NET_SessionId 过期:在会话结束时

因此,当您关闭浏览器时,您将失去会话但不会被注销。 当您重新打开浏览器时,只有 ASP.NET_SessionId 过期。

如果您想创建持久会话 cookie,请使用:

Create Persistent ID Cookies

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2012-12-28
    • 1970-01-01
    • 2023-03-20
    • 2011-12-17
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多