2017-09-17 78 views
0

有兩個域:domain1.comdomain2.com。的domain1.com服務器:設置cookie交叉原點

app.get('/',(req,res,next)=>{ 
    res.redirect('domain2.com/'); 
}) 

domain2.com服務器:

app.get('/',(req,res,next)=>{ 
    res.cookie("name",'luoxia'); 
    res.end(); 
}) 

我發現cookie設置爲domain1.com,爲什麼呢?

我想將cookie設置爲domain2.com。這個怎麼做?

回答

1

爲其他域設置cookie是不可能的。允許這會帶來巨大的安全缺陷。 沒有跨域cookie這樣的事情。你可以在foo.example.com和bar.example.com之間共享一個cookie,但不能在example.com和example2.com之間共享一個cookie,這是出於安全原因。

如果要將數據傳遞到另一個域,可以將其編碼到URL中。或者你可以這樣的黑客。

集中到單個域中所有的cookies,

1. let's say cookiemaker.com When the user makes a request to example.com you redirect him to cookiemaker.com 
    2.cookiemaker.com redirects him back to example.com with the information you need 

當然,這不是一個完全安全的,你必須創建某種你的應用程序做之間的內部協議。

最後,如果你在每個請求上做了這樣的事情,那麼對用戶來說就會非常煩人,但如果它只是第一個請求,那就不好了。

看到RFC6265

的用戶代理將拒絕Cookie,除非域屬性 指定的cookie將包括原始服務器範圍。 例如,用戶代理將接受具有「example.com」域的 屬性或來自 foo.example.com的「foo.example.com」的cookie,但用戶代理將不接受帶有 「bar.example.com」或「baz.foo.example.com」的域屬性。

注意:出於安全原因,許多用戶代理配置爲拒絕 對應於「公共後綴」的域屬性。例如, 某些用戶代理將拒絕「com」或「co.uk」的域屬性。 (參見5.3節以獲取更多信息。)

1https://tools.ietf.org/html/rfc6265#section-4.1.2.3

+0

感謝您的回覆,但我認爲你midunderstood我的問題,如你所說,當'example.com'是重定向到'cookiemaker。 com'和'cookiemaker.com'不能將cookie設置爲'example.com',但我發現cookie被設置爲'example.com'就像我的問題。我不想將cookie設置爲'example.com',而是設置爲'cookiemaker.com' – laoqiren