有人能告诉我如何在asp中检测用户会话何时过期吗?
一旦会话过期,我想将用户重定向到已注销的页面。
谢谢 Sp
我想你需要在网站的一组页面上实现会话检查,因此一个好的方法是为所有“受限访问”页面声明一个基类。 类似于:
public class BasePage : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (Session["Context"] == null)
{
// do redirect
}
}
}
假设在登录时,您将分配一个代表会话的对象到Session["Context"]
您的页面将继承此类:
public partial class _Default : BasePage { ... }
编辑:不,那可能行不通。请参见下面的评论。
如果您必须在会话过期时重定向,那么像这样的东西是否适合您?
private void Page_Load(object sender, System.EventArgs e)
{
Response.AddHeader(“Refresh”,Convert.ToString((Session.Timeout * 60) + 5));
if(Session[“IsUserValid”].ToString()==””)
Server.Transfer(“Relogin.aspx”);
}
编辑2:注意,如果您有AJAX内容,则可能会变得棘手。
我看到过一些示例,人们将其放在基本页面的page_load中,并从此基本页面继承所有的.aspx页面。这样可以避免您为每个页面都添加此代码。
为什么第一种方法不起作用(Session_End)?这是在会话结束时服务器内部调用的函数。因此,没有相关的请求/响应进行重定向或传输。也就是说,服务器可能在关闭浏览器20分钟后调用此函数。
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
//FormsAuthentication.RedirectToLoginPage();
Response.Redirect("~/Login.aspx");
}