对不起,如果这已被覆盖,但我要拔掉头发。 我的网站正在使用表单身份验证,并且当我在// localhost上进行测试时工作正常,但是当我发布到Web时,它在IE9中不起作用。我已经按照教程中概述的所有步骤进行了操作,但是当使用IE9或Chrome FormsAuthentication.SetAuthCookie时,从不创建cookie。踢球者是我使用Firefox时的工作原理。下面是我的web.config中的代码和我在C#中的代码。
基本上,我从用户那里收集用户名和密码,并使用存储过程对我的SQL Server进行身份验证。然后返回一个临时Web密钥,该网站用于与用户的配置文件进行交互。 Web密钥作为标识存储在FormsAuthentication cookie中,我可以检索该标识以对正在登录的用户进行保护。
另外,我知道永远不会创建身份验证cookie,因为我在页面上有一个永远不会更改的asp:loginstatus控件。
的web.config:
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
protection="All"
path="/"
slidingExpiration="true"
timeout="60"
cookieless="AutoDetect" />
</authentication>
<authorization>
<deny users="?"/>
<allow users= "*"/>
</authorization>
在后面的代码中:
void LogUserIn(string UserEmail, string Pwd)
{
conn = new SqlConnection(connstr);
sql = new SqlCommand("exec usp_AuthLogin @Email, @Pwd", conn);
sql.Parameters.AddWithValue("@Email", UserEmail);
sql.Parameters.AddWithValue("@Pwd", Pwd);
try
{
conn.Open();
reader = sql.ExecuteReader();
while (reader.Read())
{
Result = reader["Result"].ToString(); // value of webkey
}
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}
// if successful log in and create cookie
if (Result != "Denied")
{
FormsAuthentication.SetAuthCookie(Result, true); // set cookie with webkey from sql server
LoggedIn = true;
}
else
{
LoggedIn = false;
}
}
请帮忙
答案 0 :(得分:9)
我很确定你需要使用用户名作为SetAuthCookie中的第一个参数 - 这就是FormsAuthentication模块如何知道用户是谁。
SetAuthCookie在引擎盖下创建一个身份验证票。你有没有尝试制作自己的身份证?它可以让你存储额外的数据。
这里解释:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx#Y1368
基本上你这样做:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
username,
DateTime.Now,
DateTime.Now.AddMinutes(30),
isPersistent, //true or false
webkey, //Custom data like your webkey can go here
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
这解释了您如何阅读数据 http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.userdata.aspx
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string webkey = ticket.UserData;
编辑:此外,默认情况下,auth cookie为httponly。您可以使用firefox插件(如实时标头)来验证它是否已创建。