簡體   English   中英

Node.js快遞:為什么我看不到cookies?

[英]Node.js express: why can't I read cookies ?

我寫了一個非常簡單的 node.js 服務器:

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 發送了一個 get 請求,文件 'hello.html' 就會被提供給客戶端。 瀏覽器保存 cookie “username=John Doe”並向端點 localhost:3000/ajax 發送 AJAX 請求。 我的意圖是讀取服務器中cookie的內容(我知道cookies是從客戶端自動發送的)。 但是, req.cookies["username"] 返回未定義。

你知道為什么嗎?

問題是我將GET請求發送到localhost:3000,因此cookie被保存在域http:// localhost中 但是,當我向127.0.0.1發送AJAX調用時,由於瀏覽器將127.0.0.1和本地主機視為不同的域,因此未發送cookie。 因此,使用127.0.0.1:3000(而不是localhost:3000)打開瀏覽器可以解決該問題。

我也面臨同樣的問題,但我找到了解決方案。

如果您使用的是 axios 那么您必須使用{ withCredentials: true }作為第二個參數。 或者,如果您使用的是 fetch,那么您必須使用credentials: 'include'作為選項(第二個參數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM