以下是登录过程中涉及的所有代码:
public static bool Login(int ID){ try { string securityToken = UserHelper.AuthenticateUser(ID); DateTime expiryDate = DateTime.Now.AddYears(1); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1,ID.ToString(),DateTime.Now,expiryDate,true,securityToken,FormsAuthentication.FormscookiePath); string encryptedTicket = FormsAuthentication.Encrypt(ticket); @R_301_6822@cookie cookie = new @R_301_6822@cookie(FormsAuthentication.Formscookiename,encryptedTicket); cookie.Expires = expiryDate; @R_301_6822@Context.Current.Response.cookies.Add(cookie); return true; } catch { return false; }}
Web.config文件:
<system.web> <machineKey valIDationKey="autoGenerate" decryptionKey="autoGenerate" valIDation="SHA1" /> <compilation deBUG="true"> <authentication mode="Forms"> <forms loginUrl="~/Login.aspx" timeout="2880"/> </authentication>...
我的做法有问题吗?为什么它过期如此之快?
编辑
全球代码:
protected voID Application_AuthenticateRequest(object sender,EventArgs e){ if (Request.PhysicalPath.EndsWith(".aspx") || Request.PhysicalPath.EndsWith(".axd") || Request.PhysicalPath.EndsWith(".ashx")) SecurityManager.SetPrincipal();}
SetPrincipal代码:
public static voID SetPrincipal(){ IlivrePrincipal principal = null; FormsIDentity IDentity; UrlParameters urlParameters = UrlParametersHelper.GetUrlParameters(@R_301_6822@Context.Current.Request); if (@R_301_6822@Context.Current.Request.IsAuthenticated) { IDentity = (FormsIDentity)@R_301_6822@Context.Current.User.IDentity; User userProfile; urlParameters.SecurityToken = (((FormsIDentity)IDentity).Ticket).UserData; try { userProfile = UserHelper.GetUser(urlParameters.SecurityToken); UserHelper.UpdateLastActiveOn(userProfile); principal = new AuthenticatedPrincipal(IDentity,userProfile); } catch { //Todo: Log an exception FormsAuthentication.SignOut(); principal = new AnonymousPrincipal(new GuestIDentity(),UserHelper.GetUser(null)); } } else { principal = new AnonymousPrincipal(new GuestIDentity(),UserHelper.GetUser(null)); } @R_301_6822@Context.Current.User = principal;}解决方法 这是你的问题.
<machineKey valIDationKey="autoGenerate" decryptionKey="autoGenerate" valIDation="SHA1"/>
每当应用程序池循环使用时,ASP将会生成一个新的机器密钥.哪个时间可以合理地发生.
机器密钥用于加密和解密您的FormsAuthentication cookie.如果它更改,浏览器上的cookie不再是任何好的.所以系统会对待你,好像你从来没有登录过.
尝试生成静态密钥并将其添加到配置文件中.应该看起来像这样:
<machineKey valIDationKey="21F090935F6E49C2C797F69(snip)F1B72A7F0A281B" decryptionKey="ABAA84D7EC4BB56D75D(snip)B8BF91CFCD64568A145BE59719F" valIDation="SHA1" decryption="AES"/>
生成一个关键here.
总结以上是内存溢出为你收集整理的c# – 为什么我的表单认证票证过期如此之快?全部内容,希望文章能够帮你解决c# – 为什么我的表单认证票证过期如此之快?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)