2012-02-16 115 views
3

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

+0

你有一个数据库,你可以存储这个会话状态?每个用户在创建这些状态值之前是否进行身份验证?我认为你可以存储这些值,这样如果会话过期,你可以再次根据用户信用查找它们。 – GrantVS 2012-02-16 22:59:13

+0

yeap,实际上在我的数据库中有一张表,用于存储用户登录时的日期时间,但如果会话过期,我无法在应用程序设置为null之前处理此时刻。 – Jorge 2012-02-16 23:01:00

+0

您可以尝试global.asax中的session_end吗? – findcaiyzh 2012-02-16 23:05:19

回答

0

我不确定它是否在MVC中相同但在叶奥尔德asp.net我有一个需要登录的时候某人的会话超时的应用程序,我做到了在Global.asax.cs中文件中的Session_End中

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(); 

显然你必须设置一些在你的登录方法中,这些会话变量(如果你想要那种信息,比如总登录时间/会话时间),你可能会有自己的方法来保存任何你需要保存的数据...但希望那一大堆t启发一些想法?

我有一个“注销点击”会话变量(当你点击注销时设置),因为当用户点击注销时,它将有不同的日志和Session_End调用Session.Abandon()后调用,所以我需要确保它没有记录注销,然后是会话超时。

+0

Session_End有局限性。首先也是最重要的,它只在使用InProc会话管理时才起作用。其次,根据您存储的内容,您可能会根据关闭浏览器的用户获取不准确的数据。您将无法分辨在网站上超时的用户与关闭浏览器窗口的用户之间的区别。 http://stackoverflow.com/questions/1262867/session-end-code-on-browser-close – 2012-02-17 17:49:39