我正在使用.NET framework 4.5
我已将sessionState
设置为在60分钟后过期。需要“记录”的每个页面都继承自名为BasePage.cs
的类。在OnPreInit
事件上,此类验证Session对象,并在会话过期时重定向到登录页面。
这是sessionState(web.config)的配置:
<sessionState timeout="60"/>
这是我在“BasePage.cs”课程中的验证:
protected override void OnPreInit(EventArgs e)
{
if (HttpContext.Current.Session["infosession"] == null)
{
Response.Redirect("default.aspx");
}
}
当用户通过页面导航时,此验证工作正常。
在某些页面中,我使用的是从javascript调用的WCF服务(启用了Ajax)。在生成页面的时间和调用WCF服务的时间之间,会话可能会过期。 鉴于我不应该假设我的Wcf服务的消费者将是一种特定类型的软件或具有某些功能,如网络浏览器,我无法在那里进行验证。
所以经过一些解释,这里的问题是:
当会话到期时(60分钟后),是否有可能将自动重定向到登录页面?
答案 0 :(得分:1)
为什么不做类似以下的事情
public static string Infosession
{
get
{
object value = HttpContext.Current.Session["infosession"];
return value == null ? "" : (string)value;
}
set
{
HttpContext.Current.Session["infosession"] = value;
}
}
我会初始化Global.asax.cs文件中OnSessionStart()的值
HttpContext.Current.Session["infosession"] = string.Empty;
我会移动此代码
protected override void OnPreInit
到Page_Load() event
另一种选择
protected void Page_load(EventArgs e)
{
if (HttpContext.Current.Session["infosession"] == string.Empty)
{
Response.Redirect("default.aspx");
}
}
答案 1 :(得分:1)
假设您正在寻找客户端解决方案 - 只需将计时器设置为到期时间(即1小时)和How can I refresh a page with jQuery?:
reloadTimer = setTimeout(60*60*1000, function() { location.reload();}
如果您在重置会话超时的页面上获得AJAX更新,则可能需要重置计时器。
请注意,它不会阻止一个人直接调用您的WCF服务,因此它不是安全措施,而是方便。