1

我是节点新手,正在阅读一些教程。我有一个运行此代码的简单节点服务器:

// 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 访问它。

4

1 回答 1

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 }你可以得到以下信息:

“其他饼干;foo=bar

这是因为 JavaScript 在浏览器本身中比在控制台中更多地使用 cookie,如果您激活了 httpOnly 标志,您可以 100% 确定没有 JS 脚本可以使用它。

阅读有关 cookie 的更多信息

于 2017-12-19T02:18:51.057 回答