- 因为 PHP 不是 Nodejs。PHP 中的会话管理与节点中的会话管理不同:节点永不消亡,与 PHP 不同,PHP 会不断地由您的服务器守护程序(apache、IIS、您有什么)调用,要求生成一些内容,然后结束其进程。Node 相当于 Apache加PHP。
- 它用于加密会话 cookie,以便您可以合理(但不是 100%)确定 cookie 不是假的,并且应将连接视为与 express 进行的较大会话的一部分。
- 这就是为什么您不将字符串放在源代码中的原因。您将其设为环境变量并将其作为 process.env("SESSION_SECRET") 读入,或者使用
.env
带有https://npmjs.org/package/dotenv的文件,并确保这些文件永远不会触及您的存储库(svn/git排除/忽略),以便您的秘密数据保持秘密。
- 当您的节点应用程序运行时,秘密是不可变的。提出一个长而有趣的句子比 UUID 要好得多,UUID 通常比
"I didn't think I needed a secret, but some rando on Stackoverflow told me Express needed one so here we are"
.
我如何使用会话:
.env 文件(始终在我的 .gitignore 文件中,因此它永远不会访问我的公共存储库):
SECRET="This is my funky secret oh my god it has ninja turtles"
应用程序.js:
var express = require('express'),
env = (function(){
var Habitat = require("habitat");
Habitat.load();
return new Habitat();
}()),
app = express();
app.use(express.compress()); // gzip all the things. If possible.
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.cookieSession({
key: "mysite.sid",
// seeing this tells you nothing about the actual secret:
secret: env.get("SESSION_SECRET"),
cookie: {
maxAge: 2678400000 // 31 days
}
}));
app.use(express.csrf());
该 CSRF 位确保页面请求来自您自己的站点,而不是 cURL 请求或嵌入其他人的网站。http://expressjs.com/api.html#csrf了解更多信息。