微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用节点 cookie-session 创建 cookie

如何解决如何使用节点 cookie-session 创建 cookie

我正在运行一个小型节点应用程序。我试图让它为每个访问者创建一个 cookie,称为“会话”,其中包含 - 例如 - 会话 ID。但是我似乎无法让节点通过 cookie-session 创建 cookie。到目前为止我的代码

const fs = require('fs');
const http = require('http');
const https = require('https');
const privateKey = fs.readFileSync('PATHTOKEY');
const certificate = fs.readFileSync('PATHTOKEY');
const credentials = {key: privateKey,cert: certificate};
const Keygrip = require("keygrip");    

const express = require('express');
const app = express();    

const port = APORTNUMBER;
const secureport = APORTNUMBER;
const helmet = require('helmet');    

const options = {
  dotfiles: 'deny',etag: true,extensions: ['html','htm'],index: 'index.html',lastModified: true,maxAge: 0,redirect: true,setHeaders: function (res,path,stat) {
    res.set('x-timestamp',Date.Now())
  }
};    

app.use(express.static('public',options),helmet());    

到目前为止,没有问题。但随后是中间件 cookie 会话。

const session = require('cookie-session');
const expiryDate = new Date(Date.Now() + 60 * 60 * 1000); // 1 hour    

app.use( 
  session({
    name: 'session',keys: new Keygrip(["MYSECRET1","MYSECRET2"]),cookie: {
      secure: true,httpOnly: true,expires: expiryDate
    }
  })
);    

上面,我已经指定了中间件来使用这些 cookie 会话参数,但是我如何从这里开始真正让它创建这个 cookie?

const httpServer = http.createServer(app);
const httpsServer = https.createServer(credentials,app);    

httpServer.listen(port);
httpsServer.listen(secureport);    

console.log("Node server started");

解决方法

您当前的代码看起来不错,同样基于文档@http://expressjs.com/en/resources/middleware/cookie-session.html

我建议定义一个 app.get 并使用 postman 或 fidler 之类的工具测试所有内容。

例如

app.get('/test',function (req,res,next) {
  // Update views
  req.session.views = (req.session.views || 0) + 1

  // Write response
  res.end(req.session.views + ' views')
})
,

我一直无法弄清楚如何使用 express-cookie 和 cookie-session。但是,我已经能够使用 cookie-parser 中间件创建 cookie。

依赖:

const cookieParser = require('cookie-parser');

配置:

const cookieConfig = {
  httpOnly: true,secure: true,maxAge: 1800,signed: true
};

快递:

app.use(cookieParser('MYSECRET'));    

app.use(function (req,next) {
  let cookie = req.cookies.cookieName;
  if (cookie === undefined) {
    let randomNumber=LOGICFORRANDOMNUMBER
    res.cookie('COOKIENAME',randomNumber,cookieConfig);
  };
  next();
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?