51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2304|回复: 3
打印 上一主题 下一主题

.net MVC 解决session超时失效的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-5 09:19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用于登录以后,将用户信息写入session
  1. public class HomeController:Controller{
  2.     public ActionResult Login(){
  3.         ....
  4.         System.Web.HttpContext.Current.Session["id"] = RequestHandler.SafeInt(row["id"].ToString());
  5.         System.Web.HttpContext.Current.Session["type"] = RequestHandler.SafeInt(row["type"].ToString());
  6.         System.Web.HttpContext.Current.Session["name"] = row["name"].ToString();
  7.         ....
  8.     }
  9. }
复制代码
在UserBaseController的OnActionExecuting方法中验证用户的身份信息
  1. public class UserBaseController : Controller{
  2.     protected override void OnActionExecuting(ActionExecutingContext filterContext){
  3.         base.OnActionExecuting(filterContext);
  4.             if (System.Web.HttpContext.Current.Session["id"] == null)
  5.             {
  6.                 if (Request.IsAjaxRequest() == true)
  7.                 {
  8.                     filterContext.Result = AjaxForbidden();
  9.                 }
  10.                 else
  11.                 {
  12.                     filterContext.Result = Redirect("/Home/Index");
  13.                 }
  14.                 return;
  15.             }
  16.     }
  17. }
复制代码
然后用户的controller都继承自UserBaseController,既可以实现权限的检查。

在.NET MVC中session的默认有效期是20分钟,也就是说用户在某个页面停留超过20分钟之后,再进行
其他操作时就不能通过权限检查,因为对应的session[“id”]已经为null。

调整的方式是在项目的Web.config中进行配置,如下方式可以调整为60分钟。

  1. <system.web>
  2.     <sessionState mode="InProc" timeout="60" />
  3.   </system.web>
复制代码
但是配置完成之后,并没有生效,session的有效期依然是20分钟。

经过各种谷歌百度查询之后,发现应该是应用程序池中的闲置超时没有进行设置。
在网站对应的应用程序,高级设置,进程模型,闲置超时(分钟)中也设置为60即可,亲测可用。

session有效时间的具体测试方式如下:
1. 用户访问登录的页面时,记录访问时间。
2. 用户访问登录之后的表单操作页面时,记录访问时间。
3. 在表单操作页面,通过javascript操作cookie实现递增时间刷新。
4. 通过日志中的时间间隔就可以分析出,是在时间间隔为多少时,刷新页面之后,跳转到了登录页面
(session失效)。

  1. <script>
  2. //javascript操作cookie实现递增时间刷新。
  3. //用到了amazeui操作cookie的api
  4.         if ($.AMUI.utils.cookie.get("sessionTest") != null) {
  5.             var minutes = parseInt($.AMUI.utils.cookie.get("sessionTest"));
  6.         } else {
  7.             var minutes = 1;
  8.         }
  9.         setTimeout(function () {
  10.             window.location.reload();
  11.         }, 60000 * minutes);
  12.         minutes ++;
  13.         $.AMUI.utils.cookie.set("sessionTest",minutes, 60, '/');
  14.     </script>
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-27 07:10 , Processed in 0.066327 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表