c# – 使用自定义窗体身份验证的表单身份验证续订问题
由于表格身份验证Cookie冲突,我的项目更新了表单身份验证会话.
详细说明: 用户登录后,会创建一个表单身份验证cookie(FACookieA),并对其进行身份验证.但是,在更新cookie时,会创建第二个表单auth cookie(FACookieB),并且不会续订FACookieA.在FACookieA中的到期时间之后,用户被重定向到页面请求上的登录页面,即使它在FACookieB中的到期时间之前. 生成的cookie: 请注意,两个cookie都具有相同的名称. FACookieA: name: FormsAuth domain: .formsauth.com 请注意“.”由.NET预先附加,“formsauth.com”来自Forms Authentication Ticket部分 FACookieB: name: FormsAuth host: a.formsauth.com 请注意,cookie使用“host”,而不是域,“a.formsauth.com”基于当前请求url域. 项目网址测试: a.formsauth.com Web.config文件: <forms loginUrl="~/Account/Login.aspx" name="FormsAuth"/> 码 public partial class Account_Login : System.Web.UI.Page { protected void LoginButton_Click(object sender,EventArgs e) { if (Membership.ValidateUser(LoginUser.UserName.Trim(),LoginUser.Password.Trim())) { FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1,"username",DateTime.Now,DateTime.Now.AddMinutes(2),false,string.Empty ); string encryptedTicket = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket); cookie.Domain = "formsauth.com"; cookie.Path = FormsAuthentication.FormsCookiePath; Response.Cookies.Remove(cookie.Name); Response.Cookies.Add(cookie); Response.Redirect("~/Account/ChangePassword.aspx"); //authenticated area }else { Response.Write("Invalid UserID and Password"); } } } 问题: 1)如何生成一个表单auth cookie,以便用户可以更新表单auth session并且不会被注销? 注意事项: 1)项目需要支持多种语言,可能的域格式如下: a.formsauth.com a.en.formsauth.com a.us.formsauth.com 和 b.formsauth.com b.en.formsauth.com b.us.formsauth.com 因此,我无法以声明方式设置Forms元素的domain属性.由于两组域无法共享cookie,因此允许在一组内共享cookie.这是相同的代码库用于具有不同域的不同应用程序.但是一组域可以共享cookie. 2)默认的内置FormsAuthenticationModule更新用户会话cookie,这就是我无法控制cookie中域的原因.请注意,FormsAuthenticationTicket用于在使用登录时创建cookie,如上所示. 任何的想法? 解决方法
您不能将主机和域Cookie混合使用相同的名称.要使这项工作,所有cookie都需要在顶级域设置.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |