我正在开发一个网站,我希望在会话超时后重定向到主页。 任何人都可以帮我解决这个问题。
答案 0 :(得分:1)
答案 1 :(得分:0)
这是在ASP.NET中检测会话超时和重定向到登录页面的示例,当用户在web.config文件中指定的时间空闲时会发生会话超时。
为此,我将web.config中的超时值设置为1分钟。
第一种方法
在web.config文件中,将sessionstate模式设置为inproc,将身份验证模式设置为Forms
<system.web>
<compilation debug="true"/>
<authentication mode="Forms"/>
<sessionState mode="InProc" cookieless="false" timeout="1"></sessionState>
</system.web>
我在这个例子中创建了三个页面,一个是登录页面,当会话到期时,我重定向到这个页面,一个是导航页面,我将检查会话是否有效,如果它是有效的,用户将看到此页面,他将被重定向到登录页面。
在您的应用程序或网站的根目录中添加Global.asax
类文件。
仅当应用程序中存在Global.asax
时,此方法才有效。
在我们要检查会话超时的页面的Page_Init事件中写下面提到的代码。
我们也可以将这些代码放在一个类中,并从该类继承应用程序的所有页面,作为所有页面的基类来检查会话超时。
C#CODE
protected void Page_Init(object sender, EventArgs e)
{
if (Context.Session != null)
{
if (Session.IsNewSession)
{
HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"];
if (newSessionIdCookie != null)
{
string newSessionIdCookieValue = newSessionIdCookie.Value;
if (newSessionIdCookieValue != string.Empty)
{
// This means Session was timed Out and New Session was started
Response.Redirect("Login.aspx");
}
}
}
}
}
第二种方法。
Default.aspx的代码
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnSessionStart"
runat="server"
OnClick="btnSessionStart_Click"
Text="Start Session" /><br />
<br />
<br />
<asp:Button ID="btnCheck"
runat="server"
OnClick="btnCheck_Click"
Text="Check Session ID" />
<br />
<asp:TextBox ID="txtSession"
runat="server"
Width="266px">
</asp:TextBox><br />
<br />
<asp:Button ID="btnGO"
runat="server"
OnClick="btnGO_Click"
Text="Go to Other Page" />
<br />
<br />
</div>
</form>
</body>
</html>
此页面背后的代码就像
protected void btnSessionStart_Click(object sender, EventArgs e)
{
Guid Session_id = Guid.NewGuid();
Session["SessionID"]
= Session_id.ToString();
}
protected void btnCheck_Click(object sender, EventArgs e)
{
if (Session["SessionID"] != null)
txtSession.Text =
Session["SessionID"].ToString();
else
txtSession.Text =
"Session has expired";
}
protected void btnGO_Click(object sender, EventArgs e)
{
Response.Redirect("Default2.aspx");
}
在我们要检查会话是否已超时的页面上,我们需要在页面的Page_Init事件中检查它,如果session不为null,则用户将能够转到页面其他明智的他将被重定向到登录页面。
在这个页面中,我只是按了一个按钮进入主页
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnHome"
runat="server" OnClick="btnHome_Click"
Text="Home" />
</div>
</form>
</body>
</html>
此页面背后的代码是
protected void Page_Init(object sender, EventArgs e)
{
CheckSession();
}
protected void btnHome_Click(object sender, EventArgs e)
{
Response.Redirect("Default.aspx");
}
private void CheckSession()
{
if (Session["SessionID"] == null)
{
Response.Redirect("Login.aspx");
}
}
如果我们需要在应用程序的所有页面中检查这个,那么我们可以创建一个BaseClass并编写上面提到的CheckSession和Page_Init部分的代码,并通过键入BaseClassName来代替System.Web来驱动此类中的所有ur页面。 UI.Page,它将在每次加载页面时检查所有页面的会话超时