最近在学MVC的用户登录认证,思路如下:用户点击“登录”链接-->路由分析到“用户管理控制器”的登录方法-->返回登录视图弹出登录框-->用户输入帐号密码后登录视图再POST回控制器-->控制器完成登录操作再返回视图-->如果登录成功则关闭登录弹出框层,及刷新页面信息。
其它步骤都没问题,问题就出在:如何在VIEW中判断是否登录成功?
于是俺在VIEW中用这一段代码来判断:
<% if (Request.IsAuthenticated)//如果用户认证成功;
{ %>
<script type="text/javascript">
parent.$.closePopupLayer('LoginPopup');//关闭登录弹出框;
parent.location.reload();//刷新主页;
</script>
<% } %>
但POST后返回View的Request.IsAuthenticated并不是True,要再次输入帐号密码post后才返回true,把Request.IsAuthenticated换成Page.User.Identity.IsAuthenticated,问题依然如此。
因此俺认为可能是IsAuthenticated存在延时的问题,于是用来一个替代方案:
1、在Controller处理登录认证时,增加一个ViewData来识别是否登录成功,代码如下:
if (Membership.ValidateUser(userName, password))
{
FormsAuthentication.SetAuthCookie(userName, persistent);
ViewData["longined"] = "登录成功";
return View();
}
2、在View中通过把ViewData["longined"] == "登录成功"替代IsAuthenticated来识别是否登录成功,测试通过。
本人接触MVC没多久,很多都是自己的感官认识,如有错误地方,欢迎大家指正。