【问题标题】:How to set session timeout in web.config如何在 web.config 中设置会话超时
【发布时间】:2010-11-15 09:42:11
【问题描述】:

我非常努力,但找不到解决方案如何为 ASP.Net Web 应用程序的进程内会话设置会话超时值。

我正在使用 VSTS 2008 + .Net 3.5 + C#。这是我自己写的将超时设置为1分钟,对吗?

我在web.config的system.web部分下写了

<sessionState timeout="1" mode="InProc" />

【问题讨论】:

  • 你定义超时的方式是正确的。你有什么问题吗?
  • 您知道这意味着它会在 1 分钟不活动后过期,而不是在开始后 1 分钟后过期?我的猜测是,如果你问这个问题,并且正确输入了超时时间,你可能会误解它是如何工作的。
  • 我需要设置非活动时间,这正是我所需要的。谢谢伊万!
  • 哈哈!我不建议将超时设置为 1 分钟。这会扼杀可用性!
  • 我完全理解缩短超时时间的必要性。在我的例子中,如果会话超时,它会测试网站的可用性以及用户回来后它如何反应。除非会话超时很快发生,否则很难在调试的同时进行测试

标签: c# asp.net .net session visual-studio-2008


【解决方案1】:

如果要将超时设置为 20 分钟,请使用以下内容:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

【讨论】:

  • 20 分钟还是几小时? (超时="20")
  • Config 以分钟为单位说明超时,所以 20 分钟
【解决方案2】:

您在timeout 属性中设置的值是设置会话超时值的正确方法之一。

timeout 属性指定会话在被放弃之前可以空闲的分钟数。此属性的默认值为 20。

通过为该属性分配值 1,您已将会话设置为在其空闲后 1 分钟内放弃。

要对此进行测试,请创建一个简单的 aspx 页面,并在 Page_Load 事件中编写此代码,

Response.Write(Session.SessionID);

打开浏览器并转到此页面。将打印会话 ID。等待一分钟过去,然后点击刷新。会话 ID 将更改。

现在,如果我的猜测是正确的,您希望让您的用户在会话超时后立即注销。为此,您可以构建一个登录页面,该页面将验证用户凭据,并创建一个像这样的会话变量 -

Session["UserId"] = 1;

现在,您必须像这样在每个页面上检查此变量 -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

这是一个简单的例子,说明它是如何工作的。

但是,为了使您的生产质量安全的应用程序,使用 ASP.NET 提供的Roles & Membership 类。它们提供基于表单的身份验证,这比您尝试使用的正常基于会话的身份验证可靠得多。

【讨论】:

  • 很好的建议...在使用 Response.Write(Session.SessionID); 进行测试之前,请务必先设置一个 Session 变量;否则每次刷新时它都会使用新 ID 刷新。
【解决方案3】:

如果您使用 MVC,则将其放在 Web 应用程序根目录中的 web.config 文件中,而不是 Views 目录中的 web.config 文件中。它还需要在 system.web 节点中,而不是像 George2 在他的问题中所说的那样:“我在 web.config 中的 system.web 部分下编写”

超时参数值代表分钟。

还有其他可以在 sessionState 元素中设置的属性。你可以在这里找到信息:docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

然后,您可以通过添加以下方法在 Global.asax 文件中捕获新会话的开始:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

【讨论】:

    【解决方案4】:

    在web.config中使用这个:

    <sessionState 
    
      timeout="20" 
    />
    

    【讨论】:

    • 您不需要列出的大部分属性,真的只需要timeout。 stateConnectionString 和 sqlConnectionString 在 mode="InProc" 时被忽略,mode 和 cookieless 的值设置为其默认值。所以,这真的可以归结为 Wolfwyrd 的答案。
    【解决方案5】:

    如果它在web.config 中不起作用,则需要从 IIS 中进行设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 2021-12-28
      • 2020-01-03
      • 2014-11-22
      • 2016-01-29
      • 2017-03-24
      相关资源
      最近更新 更多