c# – 使用自定义窗体身份验证的表单身份验证续订问题

c# – 使用自定义窗体身份验证的表单身份验证续订问题,第1张

概述由于表格身份验证Cookie冲突,我的项目更新了表单身份验证会话. 详细说明: 用户登录后,会创建一个表单身份验证cookie(FACookieA),并对其进行身份验证.但是,在更新cookie时,会创建第二个表单auth cookie(FACookieB),并且不会续订FACookieA.在FACookieA中的到期时间之后,用户被重定向到页面请求上的登录页面,即使它在FACookieB中的到期 由于表格身份验证cookie冲突,我的项目更新了表单身份验证会话.

详细说明:

用户登录后,会创建一个表单身份验证cookie(FAcookieA),并对其进行身份验证.但是,在更新cookie时,会创建第二个表单auth cookie(FAcookieB),并且不会续订FAcookieA.在FAcookieA中的到期时间之后,用户被重定向到页面请求上的登录页面,即使它在FAcookieB中的到期时间之前.

生成的cookie:

请注意,两个cookie都具有相同的名称.

FAcookieA:

name: FormsAuthdomain: .formsauth.com

请注意“.”由.NET预先附加,“formsauth.com”来自Forms Authentication Ticket部分

FAcookieB:

name: FormsAuthhost: 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.coma.en.formsauth.coma.us.formsauth.com

b.formsauth.comb.en.formsauth.comb.us.formsauth.com

因此,我无法以声明方式设置Forms元素的domain属性.由于两组域无法共享cookie,因此允许在一组内共享cookie.这是相同的代码库用于具有不同域的不同应用程序.但是一组域可以共享cookie.

2)默认的内置FormsAuthenticationModule更新用户会话cookie,这就是我无法控制cookie中域的原因.请注意,FormsAuthenticationTicket用于在使用登录时创建cookie,如上所示.

任何的想法?

解决方法 您不能将主机和域cookie混合使用相同的名称.要使这项工作,所有cookie都需要在顶级域设置. 总结

以上是内存溢出为你收集整理的c# – 使用自定义窗体身份验证的表单身份验证续订问题全部内容,希望文章能够帮你解决c# – 使用自定义窗体身份验证的表单身份验证续订问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1244513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存