我正在寻找node.js中基于非cookie的会话管理,比如传递像&session_id=
这样的URL中的参数。当请求带有session_id时,它将知道会话已过期。我查看了connect
库,但看起来它只是基于cookie的。
答案 0 :(得分:4)
将session id
作为GET参数传递被认为是不好的做法。为什么?这很危险,因为人们通常不关心session id
,他们可能会发布/分享内部会话ID的链接。
这也是一个问题,因为当用户点击您网络上的外部链接并转到其他网站时,该新网站将能够在引荐来源链接中看到session_id
。
所以我认为这不是一个好主意。 Cookie更安全。
答案 1 :(得分:0)
对于您收到的每个请求,您都会相应地获得所有客户端cookie。 您还可以使用“Set-Cookie”在响应HTTP标头中设置客户端cookie。
使用GET参数是不安全的。任何用户都可能意外地分享他们的会话ID,但如果你想要100%的安全性,我会通过cookie分享会话ID,我会使用HTTPS来阻止窥探者窃取cookie。
答案 2 :(得分:0)
您可以使用localstorage
或sessionStorage
..
更多信息:https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage
非常 - 非常 - 易于使用......例如在Js中:
<script>
// check if Storage is avaible
if(typeof(Storage)!=="undefined") {
// Save data to local storage (no exiparion date)
localStorage.setItem("name_always", "bxx");
// Save data to the current session (removes when the tab is closed)
sessionStorage.setItem("name_now", "bxx");
} else {
// No Storage support...
}
// Access to stored data
alert( "For only now, my name is: " + sessionStorage.getItem("name_now"));
alert( "Every day, my name is: " + localStorage.getItem("name_always"));
</script>
答案 3 :(得分:0)
您可以在node.js中使用与商店的会话。例如,您有明确的应用程序,并希望在您的webapp中使用类似会话的系统。您可以使用connect-mongo模块。这将允许您将会话存储在db中。在你的app.js
var express = require('express'),
, mongoStore = require('connect-mongo')(express);
var app = express();
app.configure('all', function () {
app.use(express.session({
secret: "terces",
cookie: { maxAge: 24 * 60 * 60 * 1000 },
store: new mongoStore({
url: your_db_url
})
}));
app.use(function(req, res, next) {
res.locals.session = req.session;
next();
});
});
使用上面的基本代码,您可以在Express中使用会话,您可以直接在控制器和视图中使用它。在您的控制器中;
app.post('/blog/create/?', function(req, res, next) {
if (!req.session.user) {
next("You need to login in order to create blog!");
}
});
在您看来,您可以使用session.user
来生成个人资料菜单。