// get user's role List<UserType> roles = rc.rolesRepository.GetUserRoles(rc.userLoginRepository.GetUserID(username)); List<string> rolesList = (from r in roles select r.ToString()).ToList(); string[] rolesArr = rolesList.ToArray(); // create encryption cookie FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 1,username,DateTime.Now,DateTime.Now.AddDays(90),createPersistentcookie,String.Join(";",rolesArr) //user's roles ); // add cookie to response stream string encryptedTicket = FormsAuthentication.Encrypt(authTicket); System.Web.httpcookie authcookie = new System.Web.httpcookie(FormsAuthentication.Formscookiename,encryptedTicket); System.Web.httpContext.Current.Response.cookies.Add(authcookie); //FormsAuthentication.SetAuthcookie(username,createPersistentcookie);
以下是我在Global.asax中的代码,将用户角色设置为用户身份:
protected voID Application_AuthenticateRequest(Object sender,EventArgs e) { httpcookie authcookie = Context.Request.cookies[FormsAuthentication.Formscookiename]; if (authcookie == null || authcookie.Value == "") { return; } FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authcookie.Value); string[] roles = authTicket.UserData.Split(new char[] { ';' }); if (Context.User != null) { Context.User = new System.Security.Principal.GenericPrincipal(Context.User.IDentity,roles); } } catch { return; } }
但是,如果顶部示例中的“createPersistentcookie”为TRUE,则不会创建持久性cookie.如果我删除最后一行如下所示:
//System.Web.httpContext.Current.Response.cookies.Add(authcookie); FormsAuthentication.SetAuthcookie(username,createPersistentcookie);
那么在我的硬盘驱动器上创建持久性cookie.但是在Global.asax代码中,“authTicket”中的UserData字段为空,因此我无法正确设置角色!
所以我必须使用SetAuthcookie创建一个持久的cookie,但是由于某些原因,UserData字段从持久性cookie中消失.
这是什么答案?
解决方法 要创建持久性cookie,您需要设置 Expires属性:if (authTicket.IsPersistent){ authcookie.Expires = authTicket.Expiration;}总结
以上是内存溢出为你收集整理的创建持久认证cookie的问题:ASP.NET MVC全部内容,希望文章能够帮你解决创建持久认证cookie的问题:ASP.NET MVC所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)