C# 处理会话变量的超时

C# 处理会话变量的超时,c#,asp.net,asp.net-mvc-3,session-variables,C#,Asp.net,Asp.net Mvc 3,Session Variables,我想知道是否有一种方法可以在web.config中配置应用程序,或者在某个地方处理会话超时。我想实现的是,转到某个控制器并保存datetime和会话变量中的其他一些值,这些值在会话变量之前设置为null,因为会话获取的超时值是我不确定在MVC中是否相同,但在旧的asp.net中,我有一个应用程序,当某人的会话超时时需要登录,我这样做了在会话结束时的Global.asax.cs文件中 if (Session == null || Session["logout-clicked"] != null)

我想知道是否有一种方法可以在web.config中配置应用程序,或者在某个地方处理会话超时。我想实现的是,转到某个控制器并保存datetime和会话变量中的其他一些值,这些值在会话变量之前设置为null,因为会话获取的超时值是

我不确定在MVC中是否相同,但在旧的asp.net中,我有一个应用程序,当某人的会话超时时需要登录,我这样做了在会话结束时的Global.asax.cs文件中

if (Session == null || Session["logout-clicked"] != null) return;
TimeSpan ts = DateTime.Now - (DateTime)Session["session.start"];
new EventLog()
{
    EventLogType = EventLogType.SessionTimedOut,
    UserId = ((UserObject)Session["UserSession"]).Id,
    DateStamp = DateTime.Now,
    LogData = "logged in for: " + (Int32)ts.TotalHours + "hrs " + ts.Minutes + "mins",
    CachedName = ((UserObject)Session["UserSession"]).Name
}.Save();
显然,您必须在登录方法中设置一些会话变量(如果您需要此类信息,如总登录时间/会话时间),并且您可能有自己的方法来保存需要保存的任何数据。。。但希望这能激发一些想法


我有一个“logout clicked”会话变量(当您单击logout时设置),因为当用户单击logout时,它将有一个不同的日志,并且在您调用session.放弃()后调用session\u End因此,我需要确保它没有在会话超时后记录注销。

您有可以存储此会话状态的数据库吗?在创建这些状态值之前,每个用户是否都进行了身份验证?我想你可以存储这些值,这样如果会话过期,你可以根据用户凭据再次查找它们。是的,实际上我的数据库中有一个表,存储用户登录时的日期时间,但是,如果会话过期,在应用程序设置为Null之前,我无法处理这一时刻。您可以尝试使用global.asax中的session_end吗?但是session变量将有值??。请记住,在丢失值之前我需要句柄session\u End有限制。首先也是最重要的一点,它只在使用InProc会话管理时起作用。其次,根据您存储的内容,您可能会根据关闭浏览器的用户获取不准确的数据。您将无法区分站点上超时的用户和关闭浏览器窗口的用户之间的区别。