我使用表单身份验证cookie存储用户详细信息.
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,userName,DateTime.Now,DateTime.Now.AddMinutes(Timeout)false}; string encryptedTicket = FormsAuthentication.Encrypt(authTicket); HttpCookie authCookie = new HttpCookie( FormsAuthentication.FormsCookieName,encryptedTicket); HttpContext.Current.Response.Cookies.Add(authCookie);
解决方法
您可以使用类似于以下内容的代码检索
FormsAuthenticationTicket
:
// Retrieves the cookie that contains your custom FormsAuthenticationTicket. HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; // Decrypts the FormsAuthenticationTicket that is held in the cookie's .Value property. FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); // The "authTicket" variable now contains your original,custom FormsAuthenticationTicket,// complete with User-specific custom data. You can then check that the FormsAuthenticationTicket's // .Name property is for the correct user,and perform the relevant functions with the ticket. // Here,we simply write the user-specific data to the Http Response stream. if (authTicket.Name == txtUserName.Text) { Response.Write(authTicket.UserData); }
上面的代码引用了txtUserName.Text之类的东西,所以这里有一个完整的.ASPX页面,您可以将其粘贴到一个空的ASP.NET webform中以查看它是如何工作的:
<%@ Page Language="C#" %> <%@ Import Namespace="System.Web.Security" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Page_Load(object sender,EventArgs e) { double Timeout = 15.00; if (!IsPostBack) { FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,txtUserName.Text,DateTime.Now.AddMinutes(Timeout),false,"This is my secret user-specific data"); string encryptedTicket = FormsAuthentication.Encrypt(authTicket); HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encryptedTicket); HttpContext.Current.Response.Cookies.Add(authCookie); } else { // Retrieves the cookie that contains your custom FormsAuthenticationTicket. HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; // Decrypts the FormsAuthenticationTicket that is held in the cookie's .Value property. FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); // The "authTicket" variable now contains your original,// complete with User-specific custom data. You can then check that the FormsAuthenticationTicket's // .Name property is for the correct user,and perform the relevant functions with the ticket. // Here,we simply write the user-specific data to the Http Response stream. if (authTicket.Name == txtUserName.Text) { Response.Write(authTicket.UserData); } } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Forms Authentication Login</title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> UserName: </td> <td> <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> </td> </tr> <tr> <td> Password: </td> <td> <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox> </td> </tr> <tr> <td> <asp:Button ID="Button1" runat="server" Text="Login" /> </td> </tr> </table> </div> </form> </body> </html>