我知道有很多關於這個問題的問題,但我一直在研究我的問題一段時間了,沒有任何建議的解決方案似乎能解決我的問題。nodejs中的會話處理。 CORS問題
我正在開發一個web應用程序。
在前端,我將AJAX請願投入到後端,在nodejs中開發。
在後端我試圖用express.js中間件來處理用戶會話。
我無法讓會話正常工作。
我認爲這是AJAX申請的問題,但從我讀過的內容來看,我應該可以用這種請願創建cookie,所以我不知道該怎麼想。
在我的後端,我使用中間件來處理CORS問題。下面的代碼:
var enableCORS = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Cookie');
res.header('Access-Control-Allow-Credentials', true);
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.status(200).send('');
}
else {
next();
}
};
app.use(enableCORS);
然後,我想,當我處理實際的請願書來處理這樣的對話:
req.session.field = 'value';
的問題是,我沒有收到任何會話信息以下請願書。
我一直在密切關注這個問題。我使用的AJAX請願的一個例子是:
$.ajax({
url: 'http://example.com/resource',
type: 'get',
dataType: 'json',
async: true,
crossDomain: true,
beforeSend: function(xhr){ xhr.withCredentials = true; },
success: function(x, status, xhr){
console.log(x);
},
error: function(xhr, status, error){ }
});
我一直在看我的瀏覽器的網絡部分中的http包交換。這些請求和響應頭:
請求報頭:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,es;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Content-Length:29
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:example.com
Origin:http://example.net
Pragma:no-cache
Referer:http://example.net/
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36
響應頭:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, Authorization, Content-Length, X-Requested-With, Cookie
Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Length:96
Content-Type:application/json; charset=utf-8
Date:Sun, 12 Apr 2015 16:32:36 GMT
Server:Cowboy
Set-Cookie:connect.sid=s%3A7OCuaEWUjkpdOrxFuNo6KrtpnS_e5SpZ.S2O4PIVy2YkKuLxQ9KuzfcaszRZzqq5hjL3PfaHrQBw; Path=/; Expires=Sun, 12 Apr 2015 17:22:36 GMT
Vary:X-HTTP-Method-Override
Via:1.1 vegur
X-Content-Type-Options:nosniff
X-Powered-By:Express
在響應中的Set-Cookie頭實際發送,但沒有創建的cookie我的瀏覽器,所以下列請願書不會隨身攜帶這些信息。
我確定這是一些愚蠢的細節,但我不能把它放在手指上。
預先感謝您!
您是否嘗試過多種瀏覽器? – jwags
這會有幫助嗎?目前,我正在使用谷歌瀏覽器,版本號爲39.0.2171.71 –
看起來您的問題來自您使用的瀏覽器,並不尊重set-cookie響應標題。 [Here](https://code.google.com/p/chromium/issues/detail?id=158148)與某人報告OSX 10.10.1上的chrome 39的相同問題的鏈接。也許嘗試使用一些不同的瀏覽器,看看它們是否適用於其中的任何一種? – jwags