当会话过期时,我的应用程序会抛出错误。

我不希望会话自动过期......

但如果没有办法做到这一点,那么应该将其重定向到登录页面,而不是显示错误......

我尝试这样做......

Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60) + 10) + "; URL=Login.aspx");

当会话过期时此代码不起作用..我收到一条错误消息

在这种情况下无法做出响应。

网络配置有这个

<authentication mode="Forms">
        <forms loginUrl="Login.aspx" name="Cookie" timeout="10080" path="/">
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
        <allow users="*"/>
    </authorization>

我还需要在网络配置中添加其他内容吗...

有什么建议...谢谢

这是我的页面加载

 protected void Page_Load(object sender, EventArgs e)
    {
        Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60) + 10) + "; URL=Login.aspx");
        string userName = Session["userName"].ToString();
        string password = Session["password"].ToString();
        string domain = Session["domain"].ToString();

        impersonateValidUser(userName, domain, password);


    }
有帮助吗?

解决方案

我已在主页的 Page_Load 中解决了这个问题。

每次 Page_Load 触发时,它都会检查是否存在特定的 Session 值(如果用户已正确登录,则该值应存在)。如果没有,我会重定向到登录页面。

例如:

// Assuming your using master pages (if not you could have this in a base page that all
// your pages inherit from.
protected void Page_Load(object sender, EventArgs e)
{
    if (Session["SomeKey"] == null)
    {
        // Session has expired or person has not signed in so redirect.
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("signin.aspx", true);
    }

    // If all is good continue and do whatever you normally do.
}

在您的示例中,由于会话过期,会话变量可能不存在,因此您从所有获取的会话密钥中返回null。您应该验证它们不是null,如果这样做,则对值为null的情况做出适当的反应。

其他提示

我不确定您的问题所在,但作为替代方案,请考虑使用javascript解决方案客户端提示用户在到期前续订其会话。如果用户未能肯定地同意会话续订,则重定向到注销页面以终止会话而不会让其过期。通常,您的“注销”页面将重定向回“登录”页面,以便用户在返回计算机时将被提示登录。如果用户确实单击了续订对话框中的确定(我想续订会话)按钮,那么就像@Come建议的那样使用对Keepalive页面的请求,尽管我会使用AJAX而不是iframe。

您可以查看一些示例代码在我的博客上的ASP.NET MVC上下文中执行此操作。

您可以做的就是向您的页面添加一个不可见的 iframe:

<iframe src="keepalive.aspx" style="width:0px;height:0px"></iframe>

keepalive.aspx 包含以下内容:

<%@ Page Language="C#" Inherits="Keepalive" EnableSessionState="True"%>
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" >
<html>
  <head>
   <META http-equiv="refresh" content="60"/>
  </head>
  <body></body>
</html>

每 60 秒 keepalive.aspx 会自行刷新一次,从而使会话保持活动状态。您可以将会话超时设置为例如 2 分钟。这样,在用户离开您的页面后,会话将很快被清理。

在您的网站上建立永久会话是一个坏主意,但您可以通过在web.config中为会话超时提供大值来实现此目的

<sessionState  timeout="6000"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top