代码之家  ›  专栏  ›  技术社区  ›  dragonfly

SessionID在会话。放弃呼叫

  •  13
  • dragonfly  · 技术社区  · 14 年前

    我正在写一些基于SessionID的日志代码。。。

    但是,当我注销(呼叫会话。放弃),并再次登录,SessionID仍然不变。基本上,我电脑上的每个浏览器都有自己的会话id“attached”,并且不会因为某些原因而改变:/

    我的会话配置如下所示:

        <sessionState
           mode="InProc"
           timeout="1" />
    

    谢谢你,小爪子

    5 回复  |  直到 14 年前
        1
  •  14
  •   Sachin Shanbhag    14 年前

    查看这篇文章,它解释了会话.放弃

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

    从上面的链接-

    放弃会话时,不会从用户的浏览器中删除会话ID cookie。因此,一旦会话被放弃,对同一应用程序的任何新请求都将使用相同的会话ID,但会有一个新的会话状态实例“

        2
  •  5
  •   Zafer    14 年前

    如前所述,这是设计的默认行为 here :

    默认情况下,废弃或过期会话的会话标识符是回收的。也就是说,如果发出的请求包含过期或放弃会话的会话标识符,则使用相同的会话标识符启动新会话。您可以通过将sessionState配置元素的regenerateExpiredSessionId属性设置为true来禁用此功能

    您可以如上所述禁用此设置。

    编辑:将regenerateExpiredSessionId属性设置为true仅适用于无cookieless会话。为了解决这个问题,可以考虑实现一个继承SessionIDManager类的自定义类。你可以得到相关信息 here here

        3
  •  2
  •   shitburg    13 年前

    这里是什么工作为我,唯一的警告是,这段代码需要从您的登录例程分离。

    Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30)
    

    直到页面加载完毕,它才会生效。在我的应用程序中,我有一个简单的安全例程,强制使用一个新的ID,如下所示:

    if session("UserID") = "" then 
        Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30)
        Response.Redirect("login.aspx")
    end if
    
        4
  •  2
  •   AV2000    7 年前

    请注意,本文仅适用于启用cookie(cookieless=false)的站点。

    步骤(1)修改web.config文件将“regenerateExpiredSessionID”标志添加到下面的文件中(&A)-

    <sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" />
    

    步骤(2)在注销事件中添加以下代码-

    Session.Clear(); 
    Session.Abandon();
    Response.Cookies.Add(New HttpCookie("ASP.NET_SessionId", ""));
    Response.redirect(to you login page);
    

    步骤(3)在登录页的page\u load事件中添加以下代码-

    if(!IsPostBack) 
    {
        Session.Clear(); 
        Session.Abandon();
    }
    

        5
  •  0
  •   VinayC    14 年前

    您可以显式清除会话cookie。您应该通过以下方式控制cookie名称 configuration 清除时使用相同的名称。

    编辑: 当会话被放弃时清除会话cookie将强制ASP.NET为下一个请求创建新会话&sessionid。顺便说一句,清除会话cookie的另一种方法是使用 SessionIDManager.RemoveSessionID 方法。