有谁能告诉我如何检测用户会话何时在asp中过期?
我想在会话过期后将用户重定向到已注销的页面
由于 属
答案 0 :(得分:1)
我认为您必须在网站的一组页面上实施会话检查,因此一个好方法是为所有“限制访问”页面声明一个基类。 类似的东西:
public class BasePage : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (Session["Context"] == null)
{
// do redirect
}
}
}
假设在登录时,您将代表会话的对象分配给Session [“Context”]
您的网页将继承此课程:
public partial class _Default : BasePage { ... }
答案 1 :(得分:0)
在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的话,这可能会变得棘手。
我见过一些例子,人们会把它放在基页的page_load中,并从这个基页中提取你所有的.aspx页面。这可以防止您必须为每个页面添加此代码。
为什么第一种方法不起作用(Session_End)?这是会话结束时在服务器上内部调用的函数。因此,没有与重定向或转移相关的请求/响应。也就是说,关闭浏览器后20分钟,服务器可以调用此函数。
答案 2 :(得分:0)
您可以查看HttpContext.Current.User.Identity.IsAuthenticated属性,该属性可让您了解当前是否有经过身份验证的用户。
等页面加载
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
//FormsAuthentication.RedirectToLoginPage();
Response.Redirect("~/Login.aspx");
}