繁体   English   中英

在Session_End中访问会话变量

[英]Access session variable in Session_End

你好
在我的Web应用程序中,用户正常登录网站,并且他们已经在Session_End中将数据库中的用户表标记为在线用户,我想注销他们在Session_End中,我无法访问HttpContext.Current.Session或Session,但是它们都为null,怎么办?我在(Session_End)事件中访问会话变量。

如果您使用的是InProc会话(因此会触发Session_End事件),则可以使用

this.Session

当您使用global.Asax时,Global.asax本身会扩展HttpApplication

从MSDN( http://msdn.microsoft.com/pt-br/library/system.web.httpapplication.aspx ):

“此类是用户在Global.asax文件中定义的应用程序的基类。”

我在Global.asax内部创建了一个返回会话的方法:

public HttpSessionState GetSession()
{
    //Check if current context exists
    if (HttpContext.Current != null)
    {
        return HttpContext.Current.Session;
    }
    else
    {
        return this.Session;
    }
}

所以我可以使用以下方法@ global.asax:

var x = GetSession()["key"];

编辑

但是,可以生成多个应用程序实例来处理请求(您可以在其中设置所需的工作进程数。

IIS > App Pools > Properties

但是,使用不同的工作进程,请求可能会落在许多没有所需会话信息的工作进程中

请参阅ASP.NET会话状态和多个工作进程

我建议存储第一个访问权限和最后一个注册访问权限( Post_Authenticate事件 )。

另外,请使用定期运行的SQL Server作业来检查最后一次访问。 这样,您可以防止应用崩溃(当Session_End事件不会触发时)。

Session_End仅在使用InProc会话管理时才有效。 也许您正在使用StateServer或SqlServer方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM