【问题标题】:not able to set the cookie from script tag javascript nodejs无法从脚本标签 javascript nodejs 设置 cookie
【发布时间】:2022-02-02 20:04:50
【问题描述】:

在 HTML 方面

<script src="http://localhost:3002/widget-load?clientId=1" type="text/javascript">

然后在nodejs

app.get('/widget-load', function (req, res) {
   const { clientId } = req.query;

   // Try 1
   res.cookie("clientId", clientId, {
        // httpOnly: true
   });

   // Try 2
   res.setHeader('Set-Cookie', `clientId=${clientId};`);
   res.sendFile(__dirname + '/public/static/js/widget-load.js');

});

但这不起作用。即使我尝试过

app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
    next();
});

即使我在使用cookie-parser

var cookieParser = require('cookie-parser');
app.use(cookieParser());

但这仍然不起作用。浏览器上没有设置 cookie

【问题讨论】:

标签: javascript node.js setcookie httpcookie


【解决方案1】:

结合我链接中的答案和您的要求,它在这里工作,cookie 设置为clientId=1。对于跨站点资源,如果您没有运行 ssl,则必须将选项设置为 sameSite: 'none'secure: 'false'

const cookieParser = require('cookie-parser');
const express = require('express')
const app = express()
app.use(cookieParser());

app.get('/widget-load', function (req, res) {
    const { clientId } = req.query;
    var cookie = req.cookies.clientId;
    if (cookie === undefined) {
      res.cookie('clientId',clientId, {httpOnly: true, sameSite: 'none', secure: 'false' });
      console.log('cookie created successfully');
    } else {
      // yes, cookie was already present 
      console.log('cookie exists', cookie);
    } 


    // // Try 1
    // res.cookie("clientId", clientId, {
    //      // httpOnly: true
    // });
 
    // // Try 2
    // res.setHeader('Set-Cookie', `clientId=${clientId};`);
     res.sendFile('widget-load.js',{'root':'public'});
 
 });

 app.listen(3002, () => {
    console.log(`Example app listening on port 3000`)
  })

【讨论】:

  • 我想在浏览器中读取那个cookie
  • 我尝试了与尝试 1 相同的方法,但无法读取浏览器端的 cookie
  • 我可以阅读。在开发工具的网络窗格中
  • 是的,我可以在网络选项卡中看到,我可以在变量中读取它吗? document.cookie 为空
  • 我认为这是因为它是一个 cors 请求,它不会将其保存在 document.cookies stackoverflow.com/a/18769954/9175097
猜你喜欢
  • 2013-09-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多