最近在學MVC的用戶登錄認證,思路如下:用戶點擊“登錄”鏈接-->路由分析到“用戶管理控制器”的登錄方法-->返回登錄視圖彈出登錄框-->用戶輸入帳號密碼后登錄視圖再POST回控制器-->控制器完成登錄操作再返回視圖-->如果登錄成功則關閉登錄彈出框層,及刷新頁面信息。
?
其它步驟都沒問題,問題就出在:如何在VIEW中判斷是否登錄成功?
于是俺在VIEW中用這一段代碼來判斷:
<% if (Request.IsAuthenticated)//如果用戶認證成功;
?? { %>
<script type="text/javascript">
??? parent.$.closePopupLayer('LoginPopup');//關閉登錄彈出框;
??? parent.location.reload();//刷新主頁;
</script>
<% } %>
session驗證用戶是否登錄。但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沒多久,很多都是自己的感官認識,如有錯誤地方,歡迎大家指正。