【问题标题】:create req.cookie / access document.cookie创建 req.cookie / 访问 document.cookie
【发布时间】:2018-08-01 10:07:59
【问题描述】:

我在 express/node.js 中创建了一个 cookie

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

var app = express();

app.use(cookieParser())
app.use(function (req, res, next) {
  // check if client sent cookie
  var cookie = req.cookies.mainCookie;
  if (cookie === undefined){
    // no: set a new cookie
    var randomNumber=Math.random().toString();
    randomNumber=randomNumber.substring(2,randomNumber.length);
    res.cookie('cookieName',randomNumber, {
      maxAge: 60 * 60 * 24
      httpOnly: true
    });
    console.log('cookie created successfully', randomNumber);
  } else {
    // yes, cookie was already present
    console.log('cookie exists', cookie);
  }
  next();
});

然后,我可以访问这个cookie,比如req.cookie,但不能在前端做document.cookie。 我想在前端访问它(JavaScript)可以吗?

【问题讨论】:

    标签: javascript node.js express cookies


    【解决方案1】:

    当你设置时:

    httpOnly: true
    

    在 cookie 上,您是在告诉浏览器不允许浏览器 Javascript 访问 cookie,cookie 只能存储在本地并根据需要发送到服务器。

    如果您希望浏览器 Javascript 具有访问权限,则更改为:

    httpOnly: false
    

    我想在前端访问它(JavaScript)可以吗?

    是的,这是可能的。不要设置httpOnly: true

    如果你想了解这个,你可以阅读MDN page on cookies 那里有这个:

    为防止跨站点脚本 (XSS) 攻击,JavaScript 的 Document.cookie API 无法访问 HttpOnly cookie;它们只发送到服务器。例如,保持服务器端会话的 cookie 不需要对 JavaScript 可用,并且应该设置 HttpOnly 标志。

    【讨论】:

    • 感谢您的帮助。我已将 httpOnly false 从 true 更改,但 document.cookie 仍然为空。 document 只有 DOM 树,所以我猜 document.cookie 是空的。你有什么想法吗?
    • @TomomiSakoMaeda - 您必须显示您的特定客户端代码。浏览器 Javascript 中的 document.cookie 将包含存在于该域和路径且可供 Javascript 访问的任何 cookie。它被数百万个应用程序使用,所以如果使用得当,它就可以工作。
    • @TomomiSakoMaeda - 我注意到的一件事是 res.cookie()毫秒 内使用 maxAge 值,所以当您使用 maxAge: 60 * 60 * 24 时,距离现在只有 86 秒.
    • @TomomiSakoMaeda - 您可以直接在浏览器中查看 cookie(在 Chrome 中,它是通过高级设置页面),您可以通过查看网络选项卡直接查看 http 响应(包括 cookie)请求相关页面后的调试器。
    • @TomomiSakoMaeda - 我还注意到,在您当前的中间件代码中,如果“mainCookie”cookie 已经存在,即使上面带有较旧的httpOnly: true 标志,那么您的代码将不会修改它。因此,您可能会被当前 cookie 上的 httpOnly 标志卡住,直到您强制代码覆盖它或手动删除它(或直到它过期)。
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2016-05-05
    相关资源
    最近更新 更多