我一直在嘗試構建一個概念的本地證明,以將我們當前的解決方案移至不同的URL結構。我使用ASP.NET有3個項目,目前擁有這些URL映射到他們:ASP.NET跨子域Cookie不會附加到請求
mysite.com
mysite.com/api
mysite.com/app
要設置概念證明我在本地已經設置3個站點在IIS與以下網址:
mysite.com
api.mysite.com
app.mysite.com
並增加以下條目到HOSTS文件:
127.0.0.1 mysite.com
127.0.0.1 app.mysite.com
127.0.0.1 api.mysite.com
目前app.mysite.com
會談api.mysite.com
進行用戶登錄,它返回一個cookie b答覆。問題是該Cookie不存儲在mysite.com
下。後續對api.mysite.com
的請求沒有在請求頭中附加cookie,因此失敗。
我試驗過設置cookie的domain
屬性,但沒有成功,也沒有包含域屬性。
一個cookie的一個例子返回在請求中:
Set-Cookie: MyCookie=somestuff; domain=.mysite.com; expires=Sat, 06-Sep-2014 00:02:04 GMT; path=/; HttpOnly
然而,cookie被從未連接到任何請求api.mysite.com
也不我可以看到它在瀏覽器,Firefox,IE等的瀏覽器的cookie .. 。
請注意,我已啓用web.config中的CORS以啓用跨域請求。
編輯: 在迴應歐恩的回答。我會再澄清一下我目前的設置。
關於<machineKey>
我創建了一個machineKey,並在web.config
文件中的兩個應用程序上使用了相同的值。在使用mysite.com/api
和mysite.com/app
時,這已經在本地和在生產中工作了,直到我轉向子域時才遇到這個問題。
這裏是我的創建和連接該Cookie代碼:
private void EncryptAndAttachCookieToHeaders(FormsAuthenticationTicket ticket)
{
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie newCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
newCookie.Domain = ".mysite.com";
newCookie.Expires = DateTime.Now.AddMonths(3);
newCookie.HttpOnly = true;
newCookie.Secure = false;
System.Web.HttpContext.Current.Response.Cookies.Add(newCookie);
// For testing purposes
HttpCookie hc = new HttpCookie("cookie1", "value");
hc.Domain = ".mysite.com";
hc.Expires = DateTime.Now.AddMonths(3);
HttpContext.Current.Response.Cookies.Add(hc);
HttpCookie hd = new HttpCookie("cookie2", "value");
hd.Domain = ".api.mysite.com";
hd.Expires = DateTime.Now.AddMonths(3);
HttpContext.Current.Response.Cookies.Add(hd);
所有這些Cookie(實一加兩個試驗)的觀察中提琴手響應時可見。然而,對api.mysite.com
的後續請求並非在請求標頭中附加了任何cookie。瀏覽器似乎不想現在已經移動到子域結構中的cookie存儲。
感謝您的回答Owain。我編輯了我的問題以解決您提出的問題。 – 2014-09-05 15:36:52