积极答复者
ASP.NET MVC环境下利用Froms窗体认证失败的问题!!

问题
-
利用Visual Studio 2010搭建了ASP.NET MVC 2 的开发环境,想利用MVC的Filter功能和Asp.Net的Forms窗体认证来实现简单的登录认证,部分代码如下:
AuFilter:
1 publicclass AuFilter: ActionFilterAttribute
2 {
3 publicoverridevoid OnActionExecuting(ActionExecutingContext filterContext)
4
5 {
6 if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
7 {
8 filterContext.Result =new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller ="Account", action ="Login" }));
9
10 }
11 }
12
13 }HomeController:
1 publicclass HomeController : Controller
2 {
3 //
4 // GET: /Home/
5
6 [AuFilter]
7 public ActionResult Index()
8 {
9 ViewData["UserState"] = HttpContext.User.Identity.IsAuthenticated.ToString();
10 return View();
11 }
12
13 public ActionResult About()
14 {
15 ViewData["UserState"] = HttpContext.User.Identity.IsAuthenticated.ToString();
16 return View();
17 }
18
19 }AccountController:
1 public ActionResult DoLogin()
2 {
3 SiteUser UserInfo =new SiteUser();//实例化SiteUser类。
4
5 UserInfo.UserName = Request["UserName"];
6 UserInfo.PassWord = Request["PassWord"];
7
8 if (UserInfo.UserName =="aa"&& UserInfo.PassWord =="bb")
9 {
10 //处理认证的代码,先后使用过三种代码,代码见下面。
11 }
12 return RedirectToAction("Index","Home");
13
14 }问题在于,我先后利用FormsAuthentication.SetAuthCookie,FormsAuthentication.RedirectFromLoginPage,FormsAuthenticationTicket三种认证方式,均无法通过认证,无法写入Cookie,因为我在About.aspx页面设置了用ViewData["UserName"] = HttpContext.User.Identity.IsAuthenticated.ToString();的方式取到的值都是False。
1)FormsAuthentication.SetAuthCookie
1 FormsAuthentication.SetAuthCookie(UserInfo.UserName, false, FormsAuthentication.FormsCookiePath);2)FormsAuthentication.RedirectFromLoginPage
1 FormsAuthentication.RedirectFromLoginPage(UserInfo.UserName, false);3)FormsAuthenticationTicket
1 ////创建身份验证票
2 FormsAuthenticationTicket AuTicket =new FormsAuthenticationTicket(
3 1, UserInfo.UserName, DateTime.Now, DateTime.Now.AddMinutes(30),
4 false, Request.UserHostAddress);
5 ////将票据加密
6 string authTicket = FormsAuthentication.Encrypt(AuTicket);
7 ////将加密后的票据保存为cookie
8 HttpCookie coo =new HttpCookie(FormsAuthentication.FormsCookieName, authTicket);
9 coo.Secure =false;
10 coo.Expires = AuTicket.Expiration;
11 coo.Path = FormsAuthentication.FormsCookiePath;
12 ////加入新cookie
13 Response.Cookies.Add(coo);第1种和第3中方式,点击登录以后,回到Account/Login,不能转到Home/Index,说明没有通过认证,访问Home/About,也显示IsAuthenticated值为False。
第2种方式,点击登录后,转到Home/Index,Index页面的IsAuthenticated值为True,但是再转到任何一个页面以后,IsAuthenticated值立刻变为False,包括Index页面本身。
请教各位前辈,这到底是怎么回事呢?请帮帮我,谢谢了。
答案
-
- 已标记为答案 Song TianModerator 2011年4月5日 2:39
全部回复
-
- 已标记为答案 Song TianModerator 2011年4月5日 2:39