qisunpeng的学习笔记

这个人很懒,什么都没留下--一个业余程序爱好者

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近在学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没多久,很多都是自己的感官认识,如有错误地方,欢迎大家指正。

posted on 2010-10-18 20:52  林发  阅读(1146)  评论(2编辑  收藏  举报