我有登录问题。
首先我在登录时使用SSL。
当我登录时,我正在创建一个像这样的cookie。当我检查它是否安全时答案是肯定的。
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, // version
UserName.Text, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(60),// Expiration
false, // Persistent
role); // User data
// Now encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
// Create a cookie and add the encrypted ticket to the
// cookie as data.
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);
if (authCookie.Secure)
{
new GUIUtility().LogMessageToFile("The cookie is secure with SSL.");
// Add other required code here.
}
authCookie.Secure = FormsAuthentication.RequireSSL;
// Add the cookie to the outgoing cookies collection.
HttpContext.Current.Response.Cookies.Add(authCookie);
// Redirect the user to the originally requested page
Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName.Text,false));
然后将其重定向到具有以下代码的global.asax页面:
string cookieName = FormsAuthentication.FormsCookieName.ToString();
HttpCookie authCookie = Context.Request.Cookies[cookieName];
try
{
new GUIUtility().LogMessageToFile(cookieName + authCookie.Secure);
}
catch (Exception)
{
//
}
这里我得到cookieName为“.ASPXAUTH”,authCookie.Secure值为False。 为什么会发生这种情况我希望authCookie.Secure值在这里为真。
有什么建议吗?感谢
我的网络配置包含:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="~/Default.aspx" slidingExpiration="true" timeout="120" path="/" requireSSL="true" protection="All">
</forms>
</authentication>
<httpCookies requireSSL="true"/>
<authorization>
<deny users="?"/>
<!--<allow users="*"/>-->
</authorization>
答案 0 :(得分:1)
您是否在登录时重定向到非SSL资源?如果是这种情况,则不应使用您在第一段代码中创建的cookie,因为它是一个安全的cookie,因此仅适用于SSL连接(即您明确表示不应将其发送到非SSL)请求,这就是.Secure所做的事情,因此会创建一个新的cookie。我希望它也不包括票价值。
在这种情况下,你会想要:
答案 1 :(得分:1)
限制身份验证Cookie到HTTPS连接
Cookie支持“安全”属性,用于确定浏览器是否应将cookie发送回服务器。使用安全属性集,浏览器仅将cookie发送到使用HTTPS URL请求的安全页面。
如果您使用的是.NET Framework 1.1版,请在元素上使用requireSSL =“true”设置secure属性,如下所示:
<forms loginUrl="Secure\Login.aspx"
requireSSL="true" . . . />
如果您使用的是.NET Framework 1.0版,请使用以下代码在Global.asax的Application_EndRequest事件处理程序中手动设置secure属性:
protected void Application_EndRequest(Object sender, EventArgs e)
{
string authCookie = FormsAuthentication.FormsCookieName;
foreach (string sCookie in Response.Cookies)
{
if (sCookie.Equals(authCookie))
{
// Set the cookie to be secure. Browsers will send the cookie
// only to pages requested with https
Response.Cookies[sCookie].Secure = true;
}
} }
所以根据我的说法,第一个选项不能在web配置中工作,所以我手动完成它 这是代码中的第二个选项..
请建议。