51Testing软件测试论坛
标题:
.net MVC 解决session超时失效的问题
[打印本页]
作者:
做自己的女王ヽ
时间:
2018-3-5 09:19
标题:
.net MVC 解决session超时失效的问题
用于登录以后,将用户信息写入session
public class HomeController:Controller{
public ActionResult Login(){
....
System.Web.HttpContext.Current.Session["id"] = RequestHandler.SafeInt(row["id"].ToString());
System.Web.HttpContext.Current.Session["type"] = RequestHandler.SafeInt(row["type"].ToString());
System.Web.HttpContext.Current.Session["name"] = row["name"].ToString();
....
}
}
复制代码
在UserBaseController的OnActionExecuting方法中验证用户的身份信息
public class UserBaseController : Controller{
protected override void OnActionExecuting(ActionExecutingContext filterContext){
base.OnActionExecuting(filterContext);
if (System.Web.HttpContext.Current.Session["id"] == null)
{
if (Request.IsAjaxRequest() == true)
{
filterContext.Result = AjaxForbidden();
}
else
{
filterContext.Result = Redirect("/Home/Index");
}
return;
}
}
}
复制代码
然后用户的controller都继承自UserBaseController,既可以实现权限的检查。
在.NET MVC中session的默认有效期是20分钟,也就是说用户在某个页面停留超过20分钟之后,再进行
其他操作时就不能通过权限检查,因为对应的session[“id”]已经为null。
调整的方式是在项目的Web.config中进行配置,如下方式可以调整为60分钟。
<system.web>
<sessionState mode="InProc" timeout="60" />
</system.web>
复制代码
但是配置完成之后,并没有生效,session的有效期依然是20分钟。
经过各种谷歌百度查询之后,发现应该是应用程序池中的闲置超时没有进行设置。
在网站对应的应用程序,高级设置,进程模型,闲置超时(分钟)中也设置为60即可,亲测可用。
session有效时间的具体测试方式如下:
1. 用户访问登录的页面时,记录访问时间。
2. 用户访问登录之后的表单操作页面时,记录访问时间。
3. 在表单操作页面,通过javascript操作cookie实现递增时间刷新。
4. 通过日志中的时间间隔就可以分析出,是在时间间隔为多少时,刷新页面之后,跳转到了登录页面
(session失效)。
<script>
//javascript操作cookie实现递增时间刷新。
//用到了amazeui操作cookie的api
if ($.AMUI.utils.cookie.get("sessionTest") != null) {
var minutes = parseInt($.AMUI.utils.cookie.get("sessionTest"));
} else {
var minutes = 1;
}
setTimeout(function () {
window.location.reload();
}, 60000 * minutes);
minutes ++;
$.AMUI.utils.cookie.set("sessionTest",minutes, 60, '/');
</script>
复制代码
作者:
嘻嘻嘻果冻
时间:
2018-3-5 10:11
作者:
梦想家
时间:
2018-3-6 09:07
作者:
Miss_love
时间:
2020-12-30 08:38
支持
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2