C# 检测用户会话何时具有exipred

C# 检测用户会话何时具有exipred,c#,.net,asp.net,C#,.net,Asp.net,有人能告诉我如何在asp中检测用户会话何时具有exipred吗 我想在会话过期后将用户重定向到注销页面 谢谢 Sp在global.asax文件中使用Session_End()函数。请参阅此处了解更多信息 编辑:不,那可能不行。见下面的评论 如果您必须在会话到期时重定向,这样的操作是否对您有帮助 private void Page_Load(object sender, System.EventArgs e) { Response.AddHeader(“Refresh”,Convert.To

有人能告诉我如何在asp中检测用户会话何时具有exipred吗

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

谢谢 Sp

在global.asax文件中使用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的东西,这可能会变得很棘手

我看到过这样的例子,人们会把它放在一个基本页面的页面加载中,然后从这个基本页面下载所有的.aspx页面。这就避免了必须为每个页面添加此代码


为什么第一种方法不起作用(会话结束)?这是会话结束时在服务器上内部调用的函数。因此,没有与重定向或传输相关的请求/响应。也就是说,服务器可以在您关闭浏览器20分钟后调用此函数。

我想您必须对站点的一组页面执行会话检查,因此一个好方法是为所有“受限访问”页面声明一个基类。 比如:

public class BasePage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (Session["Context"] == null) 
        {
            // do redirect
        }
    }
}
假设在登录时,您将把表示会话的对象分配给会话[“Context”]

您的页面将继承此类,如下所示:

public partial class _Default : BasePage { ... }

您可以检查HttpContext.Current.User.Identity.IsAuthenticated属性,该属性将允许您知道当前是否有经过身份验证的用户

所以在你的页面加载

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

Session_End用于清理会话变量,而不是将用户重定向到任何其他页面。@Amitabh我想他是指global.aspxNo中的函数,他是对的,我的错。使用另一个解决方案更新了帖子。另外,请注意,会话_End仅在您使用InProc时触发。如果以后切换到StateServer或SqlServer,此处的代码将不会运行。