2017-09-04 40 views
0

我寫了一個很簡單的node.js服務器:Node.js表示:爲什麼我不能讀取cookie?

var express = require('express'); 
var cookieParser = require("cookie-parser"); 

var app = express(); 
app.use(cookieParser()); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + "/hello.html"); 
}); 

app.get('/ajax', function(req, res) { 
    console.log('ajax request received'); 
    console.log(req.cookies["username"]) 
}) 
app.listen(3000); 

和一個非常簡單的客戶端HTML文件:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
    <h1> Hello World </h1> 
    <script 
      src="https://code.jquery.com/jquery-3.2.1.min.js" 
      integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
      crossorigin="anonymous"></script> 
    <script> 
     document.cookie = "username=John Doe"; 
     $.ajax({ 
      url: "http://127.0.0.1:3000/ajax", 
     }).done(function() { 
      alert('AJAX sent'); 
     }); 
    </script> 
</body> 
</html> 

正如你所理解的,一旦服務器運行和最終用戶發送一個獲得localhost:3000的請求,文件'hello.html'被提供給客戶端。瀏覽器保存cookie「username = John Doe」,並向端點localhost:3000/ajax發送AJAX請求。我的意圖是閱讀服務器中cookie的內容(我知道cookies是從客戶端自動發送的)。但是,req.cookies [「username」]返回未定義。

你知道爲什麼嗎?

+2

您沒有指定cookie的有效位置的路徑,所以它可能不適用於路徑'/ ajax'。使用瀏覽器開發工具來驗證cookie的路徑是什麼。 – CBroe

回答

1

問題是我發送GET請求到localhost:3000,因此cookie被保存在域http://localhost。但是,當我向AJAX調用127.0.0.1時,cookie不會被髮送,因爲瀏覽器將127.0.0.1和localhost視爲不同的域。因此,用127.0.0.1:3000(而不是localhost:3000)打開瀏覽器就可以解決這個問題。

相關問題