我有2個子域,我需要從兩個網站設置和讀取相同的cookie。跨子域的Asp.NET cookie不更新和不過期
當我使用本地主機時,一切工作正常。
當我切換到使用有效的網址時,我更新它時cookie的信息並未真正更新(註銷時有效日期)。
我必須設置爲「.mysite.com」
什麼是錯的cookie域?
我有2個子域,我需要從兩個網站設置和讀取相同的cookie。跨子域的Asp.NET cookie不更新和不過期
當我使用本地主機時,一切工作正常。
當我切換到使用有效的網址時,我更新它時cookie的信息並未真正更新(註銷時有效日期)。
我必須設置爲「.mysite.com」
什麼是錯的cookie域?
這裏是我的代碼:(工作在本地主機上正常,但不子域,從來沒有註銷用戶因爲cookie犯規得到過期)
登錄頁面:
FormsAuthentication.SetAuthCookie(UserName.Text, true);
// set the active collab cookie
Member member = MemberManager.GetMemberByUsername(UserName.Text);
HttpCookie cookie = new HttpCookie("Token", member.Profile.Token);
cookie.Domain = ConfigurationManager.AppSettings["CookieDomain"];
cookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie);
Globax ASAX
if (HttpContext.Current.Request.Cookies["Token"] != null) {
string token = HttpContext.Current.Request.Cookies["Token"].Value;
if (!string.IsNullOrEmpty(token)) {
// If the user is logged in with a different token
// or not logged in at all
// then log them in with the token from the cookie
if ((MemberManager.CurrentMember != null && MemberManager.CurrentMember.Profile.Token != token) || User == null) {
Member member = MemberManager.GetMemberByToken(token);
if (member != null) {
FormsAuthentication.SetAuthCookie(member.User.UserName, true);
}
}
}
}
註銷碼:
if (Request.Cookies["Token"] != null) {
HttpCookie aCookie = Request.Cookies["Token"];
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(aCookie);
}
的Web.Config
<machineKey
validationKey="{-snip-}"
decryptionKey="{-snip-}"
validation="SHA1"
decryption="AES" />
<authentication mode="Forms">
<forms name="AuthCookie"
path="/"
loginUrl="~/login.aspx"
protection="All"
timeout="60">
</forms>
</authentication>
試試這個:
if (Request.Cookies["Token"] != null) {
HttpCookie aCookie = Request.Cookies["Token"];
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies["Token"] = aCookie;
}
而不是增加它的,將其設置爲現有的Cookie。在web.config
我得到這個錯誤 'System.Web.HttpCookieCollection.this [string]'不能被分配給 - 它是隻讀的 – user176657 2010-02-19 15:03:33
你的窗體身份驗證設置需要,從而實現跨應用重定向:
<authentication mode="Forms">
<forms loginUrl="~/login.aspx" protection="All" timeout="960" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="false" defaultUrl="~/default.aspx" enableCrossAppRedirects="true"/>
</authentication>
它沒有區別,但是謝謝! – user176657 2010-02-19 15:07:56
答案是在註銷
HttpCookie aCookie = Request.Cookies["Token"];
aCookie.Expires = DateTime.Now.AddDays(-1);
aCookie.Domain = ConfigurationManager.AppSettings["CookieDomain"];
Response.Cookies.Add(aCookie);
首先到期時域設置到cookie:你應該更新你的問題,而不是發表評論。 意見:通常你不必設置cookie域。 Cookie可通過TLD(頂級域名)訪問,不需要按此方式進行按摩。如果你的應用程序在不同的頂級域名(TLD)中,那麼它不會起作用,儘管我懷疑這不是你的問題。此外,我不明白你想要完成什麼,所以我可能無法幫助你。看起來您正在將FormsAuthentication與其他身份驗證管理策略並行實施。你做這件事的原因是什麼? – 2010-02-19 15:30:22