我的应用程序在会话过期时抛出错误。
我不希望会话自动过期....
但是如果没有办法做到这一点,那么它应该被重定向到登录页面而不是显示错误...
我试着这样做....
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);
}
答案 0 :(得分:1)
我不确定您的问题所在,但作为替代方案,请考虑使用javascript解决方案客户端提示用户在到期前续订其会话。如果用户未能肯定地同意会话续订,则重定向到注销页面以终止会话而不会让其过期。通常,您的“注销”页面将重定向回“登录”页面,以便用户在返回计算机时将被提示登录。如果用户确实单击了续订对话框中的确定(我想续订会话)按钮,那么就像@Come建议的那样使用对Keepalive页面的请求,尽管我会使用AJAX而不是iframe。
您可以在sample code上的ASP.NET MVC上下文中查看执行此操作的blog。
答案 1 :(得分:1)
我已在我的母版页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的情况做出适当的反应。
答案 2 :(得分:0)
您可以做的是向页面添加不可见的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分钟。这样,会话将在用户离开您的页面后立即清理。
答案 3 :(得分:0)
在您的网站上建立永久会话是一个坏主意,但您可以通过在web.config中为会话超时提供大值来实现此目的
<sessionState timeout="6000"/>