首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC 5会话永不过期

ASP.NET MVC 5会话永不过期
EN

Stack Overflow用户
提问于 2013-11-11 09:47:20
回答 3查看 5.5K关注 0票数 1

我有一个基于MVC 5的web项目,我使用HttpSessionStateWrapper类来处理会话状态。Basicaly我将一些特定于用户的数据存储在会话状态中。下面是我的代码(没有上下文):

代码语言:javascript
复制
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也是如此。以下是一些日志:

代码语言:javascript
复制
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集合,它将满足我的需要。

EN

回答 3

Stack Overflow用户

发布于 2013-11-11 09:59:37

我认为每个请求都会有一个新会话,因为您没有在会话中存储任何内容。

尝试在Global.asax.cs中添加以下内容:

代码语言:javascript
复制
protected void Session_Start() 
{ 
    // Since .NET 2.0 ASP.NET will create a new session for each request 
    // unless some data is stored in the session, so here we go... 
    Session["dummy"] = 0; 
}
票数 1
EN

Stack Overflow用户

发布于 2013-11-11 10:06:51

尝试将应用程序非活动保留几分钟(在debug mode中运行),并在以下位置添加一个断点:

代码语言:javascript
复制
protected void Session_Start() {}

Global.asax文件中,并在返回应用程序时查看是否命中。这应确认会话实际上已被终止。

您还可以记录Session ID,并使用Tracing记录此日志,以查看ID何时更改。

票数 1
EN

Stack Overflow用户

发布于 2013-11-11 10:17:19

如果您的应用程序有一些严重的问题,或者您有大量内存泄漏,您的IIS应用程序轮询将重新启动应用程序,您将有严格的这种行为。请参阅系统事件日志。IIs日志

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19903240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档