【问题标题】:ASP.NET Session State not working in Web.config as well as Global.asaxASP.NET 会话状态在 Web.config 和 Global.asax 中不起作用
【发布时间】:2014-02-01 14:20:48
【问题描述】:

我有管理页面,用于为我的网站做一些更新工作。问题是会话将在一分钟或 30 秒内到期,并将注销用户。我已经在根文件夹的 Web.Config 以及 Admin 文件夹内的 Web.Config 中设置了会话,但会话仍然很快就会过期。我已将其设置为 60 分钟,但它仅持续 30 秒或一分钟内。这是我的 根文件夹的 web.config 内容

<sessionState timeout="60" mode="InProc" 
      cookieless="false"></sessionState>


    <customErrors mode="Off">
    </customErrors>
    <trace enabled="true" />
    <authentication mode="Forms">
               <forms
    protection="All"
    timeout="120"
    domain="www.marpallichande.in"
    slidingExpiration="true"
    name="auth_cookie" />  

    </authentication>

这是我在 Admin 文件夹中设置的 web.cofing 文件

<sessionState timeout="60" mode="InProc"
      cookieless="false"></sessionState>

这是我在 Global.asax 文件中的 Session_Start 方法下的设置

Session.Timeout=60;

我不知道会话是如何这么快过期的,或者除了会话之外还有其他原因导致注销。

【问题讨论】:

  • 如果在运行时检查 Session.Timeout 属性,当前值是多少?我看到您在 Global.asax 中设置了它,但它是否保留了该值?
  • 您有预取网页浏览器和注销链接吗? (而不是注销按钮...)
  • @SimonSvensson.. 是的,我有一个注销链接..
  • @Kaushik,注销链接在语义上是一件坏事。尝试将其注释掉,这样您的浏览器就看不到与注销功能相关的任何内容,并查看您的会话是否运行得更好。一些浏览器(和浏览器插件)会浏览他们认为您接下来想看到的链接,包括查看指向 /logout.aspx 的链接
  • @SimonSvensson.. 请告诉我我可以保留哪些其他选项来注销而不是注销链接。

标签: c# asp.net session session-timeout


【解决方案1】:

sessionState 超时值以分钟为单位。我将从删除 Session.TimeOut 开始(以及除 sessionState 超时之外的任何其他超时值,保持原样并试一试。另外,不知道为什么你有两个配置文件?它们有相同的设置吗?

我有类似的设置,但只有一个带有

的配置文件
<sessionState mode="InProc" cookieless="false" timeout="10" /> 

将其设置为 10 分钟。

【讨论】:

  • @skolte.. 正如我所说,我提供了 2 个配置文件,一个在根文件夹中,另一个在 Admin 文件夹中。 admin 文件夹中的配置文件还包含用户名,该用户名允许该用户访问该文件夹内的页面。除此之外,我还在那里添加了这个会话属性。您是否建议我删除 Admin 的 Web.config 文件中的会话属性。
  • 我会将配置文件保留在根文件夹中,然后从 Admin 文件夹中删除该配置文件。将会话属性保留在根文件夹的配置文件中。我将删除您提到的 global.asax 中的任何其他超时值,例如 Session.TimeOut。您是否为您的应用程序使用母版页? Site.master 中的 Page_Load 中的 Session.Timeout 的值是多少?
  • @skolte... 是的,我已经为我的网站使用了母版页,但我没有在 Admin 文件夹中的页面中使用母版页。我正在使用 iframe 加载不同事件的不同页面..
  • @Kaushik 你能确认一下你的 IIS 会话超时值吗?以下是 IIS 7 的查找方式。stackoverflow.com/questions/949426/session-time-out-in-iis-7 此外,如果您指定到目前为止所尝试的内容,这样我们就可以排除这些可能性,这样会更容易。据我了解,您的问题是网页在 30 秒或一分钟后超时,而配置文件中指定的值肯定不是那样。
  • @Kaushik 没有更多信息,很难说。可能有多种原因,您可以按照stackoverflow.com/questions/8235448/… 中的建议创建日志。我为您准备了一个简单的示例来演示注销。 www35.zippyshare.com/v/27746404/file.html Web 配置中的会话超时设置为 3 分钟。在VS中启动项目,登录,单击提交按钮,那里没有逻辑。让页面闲置3分钟,它会自动被踢回登录页面。将期限增加到 5 分钟,它将在 5 分钟后到期。
【解决方案2】:

在应用程序的全局 web.config 文件中写入 &lt;sessionState mode="InProc" cookieless="false" timeout="10" /&gt;。

通过将名为 Session_OnEnd 的子例程添加到 Global.asax 文件来定义 Session_OnEnd 事件。 Session_OnEnd 子例程在方法被调用或会话过期时运行。当 Timeout 属性指定的分钟数过后,会话过期而没有对会话发出请求。

仅当会话状态 Mode 属性设置为 InProc 时,才支持 Session_OnEnd 事件。

Session_onEnd 事件可以在 global.asax 中定义为:

public void Session_OnEnd()
{
  // do your desired task when the session expires
}

【讨论】:

  • 我不需要用这个方法做任何事情。我只是在维护会话超时方面遇到问题
  • 然后你可以简单地写入你想要的cs文件来设置超时,比如Session.Timeout(10); // 作为分钟,它应该可以工作。
【解决方案3】:

检查根 web.config 以获取会话状态设置,例如:
//超时以分钟为单位
//关于 InProc 使用 global.asx 的注意事项:SessionStateModule.End Event

Session_OnEnd 事件仅在会话状态为 HttpSessionState.Mode 属性值为 InProc,这是默认值。 如果会话状态模式设置为 StateServer 或 SQLServer,则 Global.asax 文件中的 Session_OnEnd 事件被忽略。如果会话 state Mode属性值为Custom,则支持 Session_OnEnd 事件由自定义会话状态存储确定 提供者。

<system.web>
<sessionState mode="InProc" cookieless="false" timeout="30" />
</system.web>

您应该只在 1 个位置定义它。

【讨论】:

    【解决方案4】:

    如果页面在几秒钟后自动退出,这是因为会话过期

     <sessionSate mode="StateServer" cookieless="false" timeout="940"/> 
    

    在web.config中编写代码

    我找到了解决方案 enter link description here

    【讨论】:

      【解决方案5】:

      IIS 中还有一个设置可能需要更新,即“空闲超时”设置。区别解释here。

      默认情况下,空闲超时设置为 20 分钟,因此您需要将其设置为 180。这可以通过进入 IIS > 应用程序池 > 右键单击​​您的应用程序池 > 高级设置来完成:

      【讨论】:

        【解决方案6】:

        我的 ASP.NET MVC Web 项目中遇到了同样的问题。使用以下方法在Global.asax.cs 文件中设置会话持续时间有效:

        public class ApplicationName : System.Web.HttpApplication
        {
            protected void Session_Start(object sender, EventArgs e)
            {
                /* Sets the session duration to 60 minutes. */
                Session.Timeout = 60;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-30
          • 2010-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多