检测用户会话何时已发布

任何人都可以告诉我如何检测用户会话何时在asp中发布?

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

谢谢Sp

在global.asax文件中使用Session_End()函数。 请看这里了解更多信息

SO – 会话结束

编辑:不,这可能不会这样做。 见下面的评论。

如果你必须重定向会话到期,这样的事情会为你做什么?

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分钟,服务器可以调用此function。

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

 public class BasePage : System.Web.UI.Page { protected override void OnInit(EventArgs e) { base.OnInit(e); if (Session["Context"] == null) { // do redirect } } } 

假设在登录时,您将一个表示会话的对象分配给Session [“Context”]

您的页面将inheritance此类:

 public partial class _Default : BasePage { ... } 

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

所以你的页面加载

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