[英]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
但是,使用不同的工作进程,请求可能会落在许多没有所需会话信息的工作进程中
我建议存储第一个访问权限和最后一个注册访问权限( Post_Authenticate事件 )。
另外,请使用定期运行的SQL Server作业来检查最后一次访问。 这样,您可以防止应用崩溃(当Session_End事件不会触发时)。
Session_End仅在使用InProc会话管理时才有效。 也许您正在使用StateServer或SqlServer方法?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.