post请求另外一个url的时候,当前页面会重新实例化一次吗?

大啵 2017-12-15 04:06:56
现在有一个菜单页面A,菜单页的Controller上加了一个CheckLogin的过滤器,会检查用户cookie和后端缓存信息,限制登陆才能查看,否则重定向。

菜单页面上有一个退出登陆logout的按钮,点击logout时,发出一个POST请求,会清理后端登陆缓存信息。post请求的action没有过滤器验证。

但是发现post到后台之后,有两个线程,一个是post-url(清理缓存),另一个是菜单页A的action,此时过滤器中读取缓存逻辑验证 和清理缓存在同时进行。

造成的结果就是:当action的过滤器先验证完,logout后执行完时,退出登录不成功,还会展示当前A页面。


怎么解决在post的时候,不再实例化菜单页?或者怎么处理这种矛盾情况?



菜单页后台代码


[CheckLogin]
public class GridManageController :BaseController
{
// GET: Grid
public ActionResult Index()
{
if (base.UserInfo == null)
{
return View();
}
ViewBag.UserRealName = base.UserInfo.RealName;
Base_MenuBLL bll = new Base_MenuBLL();
ViewBag.authorizeMenu = bll.GetMenuList(1, base.UserInfo.RoleID);
return View();
}
}


退出登录按钮js事件

$(function () {
$("#logout").click(function () {
$.post("/login/Logout",
{},
function (data) {
layer.alert(data.msg);
window.location.href = "/";
});
});



退出登陆post后端代码


public class LoginController : BaseController
{
/// <summary>
/// 用户主动注销登录
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult Logout()
{
//清理cookie 和DataCache
base.CleanUserInfo();
return Json(new { msg="注销成功"});
}



求大神指点
...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大啵 2017-12-16
  • 打赏
  • 举报
回复
找到原因了<a>标签href引起的,被自己坑的。。 问题代码:
 <li><a href="" id="logout">安全退出</a></li>
修改之后:
 <li><a href="javascript:;" id="logout">安全退出</a></li>
Jason_Mao1 2017-12-15
  • 打赏
  • 举报
回复
可以传个参数过去,来判断是那种操作。类似于 action type 一样。不同的参数执行不同的方法 。希望能帮到你。
xuzuning 2017-12-15
  • 打赏
  • 举报
回复
重新载入页面,必然重新实例化一次,这是 http 协议要求的 如果你只想变化页面的一部分,请使用 Ajax
大啵 2017-12-15
  • 打赏
  • 举报
回复
window.location.href = "/" 是post返回之后才会执行的。但是post还没返回,/GridManage/index 又被实例化了一次
xinbada1985 2017-12-15
  • 打赏
  • 举报
回复
window.location.href = "/";这个GET跳转的问题
  • 打赏
  • 举报
回复
有post操作时,将logout设置为不可点击
正怒月神 2017-12-15
  • 打赏
  • 举报
回复
你既然logout了,那么应该跳转到登录页吧? window.location.href = "/login"; ???
大啵 2017-12-15
  • 打赏
  • 举报
回复
过滤器代码


 public class CheckLogin : ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var cookie = HttpContext.Current.Request.Cookies["UserToken"];
            //无cookie则需要先登录
            if (cookie == null)
            {
                HttpContext.Current.Response.Redirect("/login/index?msg=请先登录");
                HttpContext.Current.Response.End();
                return;
            }
      var user = Common.DataCache.GetCache(Common.DESEncrypt.Decrypt(cookie.Value));
            //有cookie但服务端无用户信息,也需要先登录
            if (user == null)
            {
                HttpContext.Current.Response.Redirect("/login/index?msg=请先登录");
                HttpContext.Current.Response.End();
                return;
            }
}
}

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧