我是节点新手并经历了一些教程。我有一个运行此代码的简单节点服务器:
// SERVER CODE
const http = require('http');
const Cookies = require('cookies');
const port = 3000;
const requestHandler = (request, response) => {
cookies = new Cookies(request, response);
cookies.set("foo", "bar", { httpOnly: true });
response.end('Hello Node.js Server!');
}
const server = http.createServer(requestHandler);
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err);
}
console.log(`server is listening on ${port}`);
})
我还有另一个尝试访问此服务器的.js文件:
//CLIENT CODE
const http = require('http')
http.get('http://machine_name:3000', (
console.log(res.headers['set-cookie']);
});
根据我的理解,客户端Javascript无法提供httponly cookie。当我运行客户端代码时,我得到:
[ 'foo=bar; path=/; httponly' ]
这是对的吗?我没有正确设置吗?我觉得这是一个错误,因为httponly属性意味着我不能通过Javascript访问它。
答案 0 :(得分:0)
您正在做的是以正确的方式进行,您可以尝试使用浏览器。
Si tienes un archivo index con el siguiente contenido:
// index.js file
const http = require('http');
const Cookies = require('cookies');
const port = 3000;
const requestHandler = (request, response) => {
cookies = new Cookies(request, response);
cookies.set("foo", "bar", { httpOnly: true });
response.end('Hello Node.js Server!');
}
const server = http.createServer(requestHandler);
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err);
}
console.log(`server is listening on ${port}`);
})
执行命令时
node index.js
然后打开浏览器,打开控制台并执行以下
console.log( document.cookie ) // this not return your cookies
但如果你有 {httpOnly:false} ,你可以获得以下内容:
"其他饼干;的富=栏强>"
这是因为JavaScript在浏览器中使用的cookie多于在控制台中使用的cookie,如果激活了httpOnly标志,则可以100%确定没有JS脚本可以使用它。