编程语言
首页 > 编程语言> > c# – 在ASP.NET Web应用程序中,Session没有超时

c# – 在ASP.NET Web应用程序中,Session没有超时

作者:互联网

我正在开发一个ASP.NET 3.5 WebForms应用程序,我希望会话在一段时间后超时.之后,如果用户尝试执行任何操作,应用程序应将其重定向到一个页面,指出会话已超时并且需要重新开始.据我所知,非常标准的东西.

但是,我似乎无法使会话超时来测试此功能,无论是从Visual Studio还是从IIS运行.这是我在web.config中的会话状态设置:

<sessionState mode="SQLServer"
              allowCustomSqlDatabase="true"
              sqlConnectionString="<ConnectionString>"
              cookieless="false"
              timeout="1" />

以下是我测试会话超时的方法:

public bool IsSessionTimeout
{
    get
    {
        // If the session says its a new session, but a cookie exists, then the session has timed out.
        if (Context.Session != null && Session.IsNewSession)
        {
            string cookie = Request.Headers["Cookie"];
            return !string.IsNullOrEmpty(cookie) && cookie.IndexOf("ASP.NET_SessionId") >= 0;
        }
        else
        {
            return false;
        }
    }
}

似乎Session.IsNewSession总是返回false,这是有道理的,因为Session_End方法永远不会在我的Global.asax.cs中调用.我错过了什么?

解决方法:

我这样做:

        if (Session["myUser"] != null)
            myUser = (User)Session["myUser"];
        else
            myUser = null;

        //User must be logged in, if not redirect to the login page - unless we are already running the login page.
        if ((myUser == null) && (Request.Url.AbsolutePath != "/Login.aspx"))
            Response.Redirect("Login.aspx?Mode=Timeout", true);

在我的主页的page_init中我的一个网站.你可以很容易地适应你想要的东西.基本上,检查会话中应该存在的内容,如果不存在,则会话已超时,您可以采取适当的操作.

就我而言,它们被重定向到登录页面.在您的情况下,每当他们开始您的“进程”时,您就设置了一个会话变量.在每个页面请求上,查看该项目是否仍存在于会话中.

标签:c,asp-net,iis,session-timeout
来源: https://codeday.me/bug/20190630/1338343.html