【发布时间】:2013-11-23 01:42:12
【问题描述】:
我有一个基于 MVC 5 的 Web 项目,并且我使用 HttpSessionStateWrapper 类来处理会话状态。
基本上我在会话状态中存储了一些用户特定的数据。
这是我的代码(没有上下文):
public class Util
{
private HttpSessionStateWrapper _session;
public Util()
{
_session = new HttpSessionStateWrapper(HttpContext.Current.Session);
}
public T Get<T>(string key) where T : class
{
var sessionedObject = (T)_session[key];
if (sessionedObject != null)
{
Logger.Instance.LogDebug("Object returned from session. Session Timeout=" + _session.Timeout.ToString() + " Session Id=" + _session.SessionID);
return sessionedObject;
}
return null;
}
}
Util 类的实例被创建一次,并用作另一种单例类型的静态属性。
我在这里有一些日志记录。因此,通过 Web.config 将会话状态的超时设置为 1 分钟。
但是,即使在 10 分钟内,我的会话似乎也不会消失。
此外,我注意到每个请求SessionId 都是新的,但是当从会话中获取数据时,ID 等于首次生成的会话ID。
Session End 事件也从未为我触发,但Session Start 确实如此。
这是一些日志:
2013-11-11 04:27:38.2578 App Starting
2013-11-11 04:27:38.6641 Session onStart. Id=0x545pyzbt4e1vzh1h1rr5d5
2013-11-11 04:27:38.6641 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5
2013-11-11 04:28:06.5263 Session onStart. Id=ujuxasiz5hvzbv15gbvuuxt3
2013-11-11 04:28:06.5263 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5
2013-11-11 04:29:00.3432 Session onStart. Id=jgwmmh1ubokxn3kfadevfnph
2013-11-11 04:29:00.3432 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5
2013-11-11 04:39:25.7919 Session onStart. Id=0mocujzp4tbwwvgnkx1mn0qi
2013-11-11 04:39:25.7919 Object returned from session. Session Timeout=1 Session Id=0x545pyzbt4e1vzh1h1rr5d5
编辑:
谢谢大家的回复!由于没有时间深入调试这些东西,我决定完全拒绝使用会话状态,并使用HttpContext.Current.Items 集合,它将满足我的需求
【问题讨论】:
标签: asp.net-mvc session-state session-timeout asp.net-mvc-5