如何在web.config中设置会话超时


178

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

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

我在 web.config

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

5
您定义超时的方式是正确的。你有什么问题吗?
Darin Dimitrov

7
您知道这意味着它会在闲置1分钟后过期,而不是从开始1分钟后过期吗?我的猜测是,如果您问的是这个问题,并且正确输入了超时时间,则可能会误导它的工作方式。
伊万·兹拉塔诺夫

1
我需要设置非活动时间,这正是我所需要的。谢谢伊凡!
2009年

大声笑!我不建议将超时设置为仅1分钟。那会杀死可用性!
Brian McCarthy

3
我完全了解需要短暂的超时时间。就我而言,这是为了测试会话是否超时以及用户回来后如何响应,以测试站点的可用性。除非会话超时很快发生,否则很难在调试的同时进行测试
Brett Weber

Answers:


322

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

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

16
20分钟还是几个小时?(timeout =“ 20”)
穆罕默德·阿威斯

21
Config以分钟为单位指出超时时间,即20分钟
Wolfwyrd '16

50

您在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提供的“ 角色和成员资格”类。他们提供基于表单的身份验证,比您尝试使用的基于会话的普通身份验证更加可靠。


很好的建议...在使用Response.Write(Session.SessionID)进行测试之前,请务必先设置一个Session变量。否则,它将在每次刷新时以新的ID刷新。
克里斯·卡蒂尼亚尼

1

如果使用的是MVC,请将其放在Web应用程序的Root目录中的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.
    }
}

0

在此使用web.config

<sessionState 

  timeout="20" 
/>

30
timeout实际上并不需要列出的大多数属性。stateConnectionStringsqlConnectionString被忽略的时候mode="InProc",和值mode,并cookieless设置为默认值。因此,这确实可以归结为Wolfwyrd的答案。
arcain

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.