- 因为PHP不是Nodejs。PHP中的会话管理与node中的会话管理不同:node永远不会死,不像PHP,它不断被你的服务器守护进程(apache,IIS,你有什么)调用,要求生成一些内容,然后结束它的进程。Node相当于Apache和PHP。
- 它用于加密会话cookie,以便您可以合理地(但不是100%)确定cookie不是假的,并且连接应被视为与express的较大会话的一部分。
- 这就是您不将字符串放在源代码中的原因。您可以将其设置为环境变量并将其读入process.env(“SESSION_SECRET”),或者使用带有 https://npmjs.org/package/dotenv 的文件,并确保这些文件永远不会触及您的存储库(svn/git排除/忽略),以便您的秘密数据保持机密。
.env
- 在节点应用运行时,密钥是不可变的。想出一个长而有趣的句子比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 以获取更多信息。