2010-06-01 154 views

回答

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分钟,该功能可以被服务器调用。

+1

Session_End中是清理会话变量不是重定向用户到任何其他页面。 – Amitabh 2010-06-01 13:27:50

+0

@Amitabh我thnk他的意思是在global.aspx功能 – Steven 2010-06-01 13:32:16

+1

不,他是对的,我的坏。更新后的另一个解决方案。 – Tommy 2010-06-01 13:39:23

1

我想你必须在你网站的一组页面上实现会话检查,所以一个好的方法是为所有“受限访问”页面声明一个基类。 喜欢的东西:

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

     if (Session["Context"] == null) 
     { 
      // do redirect 
     } 
    } 
} 

假设,在登录时,你会指派代表列席会议,会议[“上下文”]对象

你的页面将继承这个类为:

public partial class _Default : BasePage { ... } 
0

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

等乌尔页面加载

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