当表单身份验证会话过期时向用户显示消息

问题描述:

这似乎很简单,我记得几年前做过这个。当表单身份验证会话过期时向用户显示消息

我只是想在登录页面上显示一条消息,当用户在请求登录页面后自动重定向到该页面,但是他们的会话现在已经过期。所以基本上,如果用户正在工作,但在没有注销的情况下离开午休时间,我希望系统告诉他们为什么他们被发送回登录页面。

类似于“您已经闲置太久,因此您必须重新登录”。

这很容易,我只是在这里碰壁。我想过要拿到原票和读过期日期,但我有点失落。

任何想法?

布伦特

尝试这个JavaScript对大小:

确保属性称为LoginPageUrl存在于后面的代码。非常适合母版页面。

如果您想从代码隐藏注册脚本,您甚至可以从应用程序中提取会话超时并注入它,以便仍然只有一个位置(web.config)来更新它。

要在将用户重定向到登录页面(.NET将处理cookie过期)之后向用户显示消息,请发送查询字符串参数,以便登录页面查找并显示一条消息,指出用户是由于不活动而被注销。

<head> 
... 
</head> 
<body onload="logoutOnExpire();" > 
<script type="text/javascript"> 
     // ACTIVITIES TO RUN FOR THE PAGE 
     function logoutOnExpire() { 
      clearTimeout(logoutTimeout); 
      logoutTimeout = 
       setTimeout('location.href = '<%= LoginPageUrl %>';', 1200000); 
       // 20 minutes 
     } 
</script> 
<form id="form" runat="server"> 
... 
</form> 
</body> 
</html> 
+0

我不想警告用户他们即将被注销......我觉得很烦人,如果我离开20分钟,当然我应该注销。另外我不需要重定向用户,.NET为我做了这些。我想告诉用户为什么当尝试点击别的东西时,他们会被发送回登录页面。我正在寻找或记住与登录页面的代码隐藏中的表单身份验证票证相关的逻辑,然后让我显示错误。 – 2010-10-21 20:33:36

+0

@Brent,是的,.NET会为你做,但是,直到另一个回发(控制事件)才会这样做。我以为你想要自动的东西。如果您使用此JavaScript,则可以传递登录页面查找的查询字符串参数,表明您由于不活动而被重定向到此处。 – Brad 2010-10-22 12:33:24

+0

谢谢,不,我不需要它是自动的。 onPostback事件很好。如果我只是使用内置方法,则减少我必须编写和管理的代码量。这不是最有意义的吗? – 2010-10-25 15:24:27

您可以在页内检查了会议,如果会议不存在,重定向到登录页面,在查询字符串一定的价值,了解这个调用came.When用户在后面从哪个页面登录,您可以使用查询字符串值来确定要显示哪个页面。

MyPage.aspx.cs,在页面加载,你可以检查,

if(Session["user"]==null) 
{ 
    Response.Redirect("Login.aspx?from=mypage"); 
} 
else 
{ 
    // Do the other stuff for the loged in user 
} 

并在Login.aspx.cs,在您从表单检查您的登录信息的代码

string userName=txtUserName.Text; 
string password=txtPass.Text; 
if(IsValidLogin(userName,password) 
{ 
    string toUrl="defaul.aspx"; 
    if(Request.QueryString["from"]!=null) 
    { 
    string fromPage=Request.QueryString["from"]; 
    if(fromPage=="mypage") 
    { 
     toUrl="mypage.aspx"; 
    } 
    else if(fromPage=="review") 
    { 
     toUrl="review.aspx"; 
    } 
    } 
    Response.Redirect(toUrl); 
} 
+0

整个想法是不必重写.NET将用户发送回登录页面的默认行为。如何找出会话在登录页面结束一次而不必传递查询字符串。我之前做过这个! – 2010-10-21 20:34:43

如果您想要将用户发送到除登录页面之外的页面,而这些页面在会话过期后导致服务器回发时,请使用Page_Load事件顶部的以下代码(如果.NET执行它,则这可能不起作用首先重定向)。

if(!Context.User.Identity.IsAuthenticated) 
{ 
    Response.Redirect("~/OtherPage.aspx", false); 
} 

如果您在您的网站基本页面,所有页面继承,将其添加到页面的Page_Load

如果您被重定向到默认登录页面,在会话超时后尝试使用页面后,不是您尝试访问的页面设置的redirecturl参数。

所以你可能推断,如果这是设置,他们以前在一个页面上,然后提出你的消息,因为去吃午饭等。