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

标签 node.js express 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的内容(我知道cookie是从客户端自动发送的)。但是,req.cookies["username"] 返回未定义。

你知道为什么吗?

最佳答案

问题是我向 localhost:3000 发送了 GET 请求,因此 cookie 保存在域 http://localhost 中。但是,当我向 127.0.0.1 发送 AJAX 调用时,不会发送 cookie,因为浏览器将 127.0.0.1 和 localhost 视为不同的域。因此,使用127.0.0.1:3000(而不是localhost:3000)打开浏览器即可解决。

关于Node.js express : why can't I read cookies ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036408/

相关文章:

node.js - 如何使用 "find where"SailsJS 蓝图路由?

javascript - 将html转pdf后 Node 返回字节数组

node.js - 我如何使用我的主机(普通的梦想主机)作为 Node 服务器?

javascript - agent.maxSockets 的真正含义是什么?

javascript - 我正在尝试解析从 firebase 查询中获取的数据,但数据没有得到解析

node.js - 如何在快速路由中指定可选参数名称?

javascript - Mongoose 4.8.1 poolSize 不会超过 2

java - 基于时间的cookie(在java servlet中创建)在超时后不会自动从浏览器中删除

javascript - 确保用户在 Angular 中经过身份验证

javascript - Jquery Cookie 通过模态显示/隐藏菜单