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

时间:2010-10-21 15:13:49

标签: asp.net c#-4.0 forms-authentication

这看起来很简单,我记得几年前这样做过。

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

类似于“你已经闲置太久所以你必须重新登录”。

这很简单我只是碰到了这里的墙。我想要获得原始票并阅读到期日但我有点失落。

有什么想法吗?

布伦特

4 个答案:

答案 0 :(得分:0)

尝试使用此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>

答案 1 :(得分:0)

您可以检查内部页面中的会话,如果会话不存在,请使用查询字符串中的某个值重定向到登录页面,以了解此调用来自哪个页面。当用户登录时,您可以使用查询字符串值确定要显示的页面。

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);
}

答案 2 :(得分:0)

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

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

如果您在网站中创建了所有网页都继承的基页,请将其添加到该网页的Page_Load

答案 3 :(得分:0)

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

所以你可以推断,如果设置了它们,它们之前就在页面上,然后显示有关因午餐而退出的消息等等。