会话过期时自动重定向到登录

时间:2015-01-26 20:28:50

标签: c# asp.net session

我正在使用.NET framework 4.5

我已将sessionState设置为在60分钟后过期。需要“记录”的每个页面都继承自名为BasePage.cs的类。在OnPreInit事件上,此类验证Session对象,并在会话过期时重定向到登录页面。

这是sessionState(web.config)的配置:

<sessionState timeout="60"/>

这是我在“BasePage.cs”课程中的验证:

protected override void OnPreInit(EventArgs e)
{
    if (HttpContext.Current.Session["infosession"] == null)
    {
        Response.Redirect("default.aspx");
    }

}

当用户通过页面导航时,此验证工作正常。

在某些页面中,我使用的是从javascript调用的WCF服务(启用了Ajax)。在生成页面的时间和调用WCF服务的时间之间,会话可能会过期。 鉴于我不应该假设我的Wcf服务的消费者将是一种特定类型的软件或具有某些功能,如网络浏览器,我无法在那里进行验证

所以经过一些解释,这里的问题是:

当会话到期时(60分钟后),是否有可能将自动重定向到登录页面?

2 个答案:

答案 0 :(得分:1)

为什么不做类似以下的事情

public static string Infosession 
{ 
    get 
    {
        object value = HttpContext.Current.Session["infosession"];
        return value == null ? "" : (string)value;
    }
    set 
    {
        HttpContext.Current.Session["infosession"] = value;
    }
}

我会初始化Global.asax.cs文件中OnSessionStart()的值

HttpContext.Current.Session["infosession"] = string.Empty;

我会移动此代码     protected override void OnPreInitPage_Load() event

另一种选择

protected void Page_load(EventArgs e)
{
    if (HttpContext.Current.Session["infosession"] == string.Empty)
    {
        Response.Redirect("default.aspx");
    }
}

答案 1 :(得分:1)

假设您正在寻找客户端解决方案 - 只需将计时器设置为到期时间(即1小时)和How can I refresh a page with jQuery?

 reloadTimer = setTimeout(60*60*1000, function() { location.reload();}

如果您在重置会话超时的页面上获得AJAX更新,则可能需要重置计时器。

请注意,它不会阻止一个人直接调用您的WCF服务,因此它不是安全措施,而是方便。