【问题标题】:handle timeout of session variables处理会话变量的超时
【发布时间】:2012-03-08 09:11:32
【问题描述】:

我想知道有没有办法在 web.config 或某处配置应用程序来处理会话超时。我想要实现的是转到某个控制器并保存日期时间和我的会话的其他一些值,这些值之前在会话变量中设置为 null,因为会话获取超时

【问题讨论】:

  • 您有可以存储此会话状态的数据库吗?在创建这些状态值之前是否每个用户都进行了身份验证?我认为您可以存储这些值,以便如果会话过期,您可以根据用户信用再次查找它们。
  • 是的,实际上我的数据库中有一个表,用于存储用户登录时的日期时间,但如果会话到期,我无法在应用程序设置为 null 之前处理这一时刻
  • 你可以试试 global.asax 中的 session_end 吗?
  • 但是会话变量会有价值吗??请记住,在我失去价值之前我想要处理

标签: c# asp.net asp.net-mvc-3 session-variables


【解决方案1】:

我不确定它在 MVC 中是否相同,但在旧的 asp.net 中,我有一个应用程序需要在某人的会话超时时进行记录,我在 Session_End 的 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();

显然,您必须在登录方法中设置一些会话变量(如果您想要此类信息,例如总登录时间/会话时间),您可能会有自己的方法来保存任何内容您需要保存的数据...但希望这可能会激发一些想法?

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

【讨论】:

  • Session_End 有限制。首先也是最重要的是,它仅在使用 InProc 会话管理时有效。其次,根据您存储的内容,您可能会根据关闭浏览器的用户获得不准确的数据。您将无法区分在网站上超时的用户和关闭浏览器窗口的用户。 stackoverflow.com/questions/1262867/…
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 2012-09-16
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 2018-01-24
  • 2017-10-06
相关资源
最近更新 更多