利用Visual Studio 2010搭建了ASP.NET MVC 2 的开发环境,想利用MVC的Filter功能和Asp.Net的Forms窗体认证来实现简单的登录认证,部分代码如下:
AuFilter:
HomeController:
AccountController:
问题在于,我先后利用FormsAuthentication.SetAuthCookie,FormsAuthentication.RedirectFromLoginPage,FormsAuthenticationTicket三种认证方式,均无法通过认证,无法写入Cookie,因为我在About.aspx页面设置了用ViewData["UserName"] = HttpContext.User.Identity.IsAuthenticated.ToString();的方式取到的值都是False。
1)FormsAuthentication.SetAuthCookie
2)FormsAuthentication.RedirectFromLoginPage
3)FormsAuthenticationTicket
第1种和第3中方式,点击登录以后,回到Account/Login,不能转到Home/Index,说明没有通过认证,访问Home/About,也显示IsAuthenticated值为False。
第2种方式,点击登录后,转到Home/Index,Index页面的IsAuthenticated值为True,但是再转到任何一个页面以后,IsAuthenticated值立刻变为False,包括Index页面本身。
请教各位前辈,这到底是怎么回事呢?请帮帮我,谢谢了。
ControllerContext.HttpContext.User.Identity.Name
楼主用的是IE10或者是windows server版本操作系统吧,这是IE10的一个bug或者说是asp.net mvc的一个Bug
在IE10里更改了http头,这样导致asp.net mvc认为客户端没有启用cookie,会导致验证失败。
简单的解决方法是,在网站根目录,新增一个浏览器定义文件(browser definition file)
步骤如下:
1.添加一个"App_Browsers"文件夹
2.添加一个"*.browser"后缀的文件,如IE10.browser.
3.添加文件内容如下:
<browsers>
<browser refID="Default">
<capabilities><!-- To avoid wrong detections of e.g. IE10 -->
<capability name="cookies" value="true" />
<capability name="ecmascriptversion" value="3.0" />
</capabilities>
</browser>
</browsers>