ASP.NET 应用程序中的会话变量超时

发布于 2024-10-10 23:05:18 字数 251 浏览 3 评论 0原文

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

例如 Session("user_id") = reader("user_id")

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

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

如何设置会话变量,以便一旦超时就无法进入登录页面,或者如何至少增加可用的时间长度?

In my web app I'm using some session variables, which are set when I login:

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

I use this through my app.

When the session variable times out, this throws errors mainly when connecting to the database as session("user_id") is required for some queries.

How can I set my session variables so that once they are timed out to go to the login page or how can at least increase the length of time the are available?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

2024-10-17 23:05:18

我猜您正在使用表单身份验证。这里的技巧是确保您的表单身份验证在会话之前过期。

我在这个答案中写过这个:

如何在会话过期时重定向到登录页面(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"/>

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

I'm guessing you're using Forms Authentication. The trick here is to ensure that your Forms Authentication expires before the session does.

I wrote about this in this answer here:

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

For example:

Configure your Forms Authentication - this sets the timeout to 60 minutes:

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

Extend Session expiry to a longer time:

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

In your Login.aspx code behind you could also do a Session.Clear(); to remove stale session data before assigning session values.

如果没有 2024-10-17 23:05:18

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

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

登录后,它会读取保存的 URL 并将用户重定向回所请求的页面。

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

In the past I've used a base page or master page on every page (making an exception for the login page) that reads a session token to see if a user is logged in currently.

If it ever reads a null it saves the current url and redirects to the login page.

After logging in it reads the saved url and redirects the user back to the requested page.

Increasing the session timeout value is a setting in IIS.

弄潮 2024-10-17 23:05:18

如何设置会话变量,以便一旦超时即可转到登录页面

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

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

它位于 sessionState元素

How can I set my session variables so that once they are timed out to go to the login page

Check if they are = null do a Response.Redirect("Home.aspx");

or how can at least increase the
length of time the are available?

Its in the web.config within the sessionState element

呆橘 2024-10-17 23:05:18

我认为很多人包装他们的会话调用以提供“延迟加载”模式。像这样的事情:

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;
    }
}

I think a lot of people wrap their session calls to provide a "lazy load" pattern. Something like this:

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;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文