asp.net app中的会话变量超时

时间:2011-01-05 14:29:52

标签: asp.net session-variables session-timeout

在我的网络应用程序中,我正在使用一些会话变量,这些变量在我登录时设置:

e.g。 Session("user_id") = reader("user_id")

我通过我的应用程序使用它。

当会话变量超时时,这会在连接到数据库时引发错误,因为某些查询需要session("user_id")

如何设置会话变量,以便一旦超时到达登录页面,或者至少可以增加可用时间长度?

4 个答案:

答案 0 :(得分:11)

我猜你正在使用表单身份验证。这里的诀窍是确保您的表单身份验证在会话之前到期。

我在这里回答了这个问题:

  

How to redirect to LogIn page when Session is expired (ASP.NET 3.5 FormsAuthen)

例如:

配置表单身份验证 - 这会将超时设置为60分钟:

<authentication mode="Forms">
    <forms defaultUrl="~/Default.aspx"
        loginUrl="~/Login.aspx"
        slidingExpiration="true"
        timeout="60" />
</authentication>

将会话到期时间延长到更长时间:

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

在您的Login.aspx代码中,您还可以在分配会话值之前执行Session.Clear();删除过时的会话数据。

答案 1 :(得分:1)

过去我在每个页面上都使用了基页或母版页(对登录页面做了​​例外),它读取会话令牌以查看用户当前是否已登录。

如果它读取null,则保存当前url并重定向到登录页面。

登录后,会读取已保存的网址,并将用户重定向回所请求的网页。

增加会话超时值是IIS中的设置。

答案 2 :(得分:1)

  

如何设置会话变量,以便在超时后转到登录页面

检查它们是否为null执行Response.Redirect("Home.aspx");

  

或者至少如何增加   可用的时间长度?

它位于sessionState元素

中的web.config中

答案 3 :(得分:0)

我认为很多人将其会话调用包装起来以提供“延迟加载”模式。像这样:

class SessionHelper
{
    public static string GetUserId()
    {
        string userId = (string)System.Web.HttpContext.Current.Session["UserId"];

        if( userId == null )
        {
           userId = reader("UserId");
           System.Web.HttpContext.Current.Session["UserId"] = userId;
        }

        return userId;
    }
}