检测用户会话何时到期

时间:2010-06-01 13:20:34

标签: c# .net asp.net

有谁能告诉我如何检测用户会话何时在asp中过期?

我想在会话过期后将用户重定向到已注销的页面

由于 属

3 个答案:

答案 0 :(得分:1)

我认为您必须在网站的一组页面上实施会话检查,因此一个好方法是为所有“限制访问”页面声明一个基类。 类似的东西:

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 { ... }

答案 1 :(得分:0)

在global.asax文件中使用Session_End()函数。请在此处查看更多信息

SO - Session End

编辑:不,那可能不会这样做。见下面的评论。

如果您必须重定向会话过期,这样的事情会为您做什么?

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分钟,服务器可以调用此函数。

答案 2 :(得分:0)

您可以查看HttpContext.Current.User.Identity.IsAuthenticated属性,该属性可让您了解当前是否有经过身份验证的用户。

等页面加载

if (!HttpContext.Current.User.Identity.IsAuthenticated)
            {
                //FormsAuthentication.RedirectToLoginPage();
                Response.Redirect("~/Login.aspx");
            }