繁体   English   中英

无法使用Node js设置cookie

[英]Unable to set cookie with Node js

我是Node js的新手。 我想了解如何使用Node获取和设置cookie。 我正在使用Visual Studio,我正在使用自动创建的嵌入式IIS Express。 我的server.js上有服务器代码:

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

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

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:61342');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

app.get('/setCookie/:param', function (req, res) {
    res.cookie('testCookie', req.params.param);
    console.log('cookie created!');
    res.send();
});

var server = app.listen(8001, 'localhost', function () {
    var host = server.address().address
    var port = server.address().port
    console.log("Server listening at http://%s:%s", host, port)
});

这是客户端代码:

function server() { 
        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", "http://localhost:8001/setCookie/cookie1", true);
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                alert("ok");
            }
        }
        xmlhttp.send();
 }

当我单击一个按钮(仅用于测试)时,我将其称为功能。 我注意到,如果我键入localhost:8001 / getCookie / cookie1,它会正确设置cookie(我可以在浏览器控制台上看到它,输入document.cookie),但是如果我在localhost上运行我的项目:61342 /并且我单击按钮调用函数server(),我得到以下响应:

Request URL:http://localhost:8001/setCookie/cookie1
Request Method:GET
Status Code:200 OK
Remote Address:127.0.0.1:8001

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:X-Requested-With,content-type
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Origin:http://localhost:61342
Connection:keep-alive
Set-Cookie:testCookie=cookie1; Path=/

但是当我在浏览器控制台上输入document.cookie时,我什么都没看到。 关于如何解决这个问题的任何想法? 谢谢您的耐心配合

这里有两个不同的问题。

第一:

document.cookie将显示属于文档来源的cookie。 跨域Ajax请求将发送和存储其发出请求的源的cookie。 由于这是一个不同的起源,它们不会出现在document.cookie 要检查它们,您需要向它们所属的来源发出请求,并在“网络”选项卡中对其进行检查。

第二:

默认情况下,跨域请求不支持cookie。 您必须withCredentials设置true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM