4

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

假设如果我在没有注销的情况下关闭浏览器并再次使用相同的 url,那么我发现 session 为 null,但我得到了 cookie (c1),然后我创建了一个新 session。但是会话 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
        }
    }
4

2 回答 2

1

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

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

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

于 2013-01-09T11:05:54.570 回答
0

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

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

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

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

创建持久 ID Cookie

于 2013-01-09T10:34:59.523 回答