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

204

我已经努力尝试,但找不到一种方法来设置ASP.Net Web应用程序中进程内会话的会话超时值。

我正在使用VSTS 2008 + .Net 3.5 + C#。以下是我自己编写的设置超时为1分钟的代码,是否正确?

我在web.config文件的system.web部分中编写了以下内容:

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

6
你定义超时的方式是正确的。你对此有任何疑虑吗? - Darin Dimitrov
7
您知道这意味着在1分钟内没有活动后它会过期,而不是从它开始算起的1分钟时间吗?我猜如果您正在问这个问题,并且已经正确输入了超时时间,您可能会误解它的工作方式。 - Ivan Zlatanov
1
我需要设置非活动时间,这正是我所需要的。谢谢Ivan! - George2
4
我完全理解需要短暂的超时时间。在我这种情况下,它是为了测试网站的可用性,如果会话超时并且用户回来后它的反应如何。除非会话超时很快发生,否则很难在同时进行调试和测试。 - Brett Weber
可能是ASP.NET中的会话超时的重复问题。 - Alex Angas
显示剩余2条评论
5个回答

358

如果想将超时时间设置为20分钟,可以使用以下代码:

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

17
20分钟还是20小时?(timeout="20") - Muhammad Awais
22
配置状态表明超时时间为分钟,因此为20分钟。 - Wolfwyrd

53
你设置在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。 - Chris Catignani

2
如果您正在使用MVC,则将其放置在Web应用程序的根目录中的web.config文件中,而不是在Views目录中的web.config文件中。 它还需要位于system.web节点中,而不是像George2在他的问题中所述:“我在web.config的system.web部分下编写了它”。
超时参数值代表分钟。
sessionState元素中可以设置其他属性。 您可以在此处找到信息:learn.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.
    }
}

1

web.config 中使用此代码:

<sessionState 

  timeout="20" 
/>

30
您列出的大多数属性都不需要,只需要 timeout 属性。当 mode="InProc" 时,stateConnectionStringsqlConnectionString 属性将被忽略,而 modecookieless 的值将设置为它们的默认值。因此,这实际上就是 Wolfwyrd 的答案。 - arcain

1
如果在web.config中无法工作,您需要从IIS设置它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接