我正在 node.js 中寻找基于非 cookie 的会话管理,例如在 URL 中传递参数,例如&session_id=
. 当请求带有 session_id 时,它将知道会话已过期。我看过connect
图书馆,但看起来它只是基于 cookie 的。
4 回答
警告
session id
作为 GET 参数传递被认为是不好的做法。为什么?这很危险,因为人们通常不关心session id
,他们可能会在里面发布/共享带有会话 ID 的链接。
这也是一个问题,因为当用户单击您网站上的外部链接并转到另一个站点时,该新站点将能够session_id
在引荐来源链接中看到该链接。
所以我认为这不是一个好主意。Cookie 更安全。
看看:会话劫持
您可以使用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>
标签:javascript html5 本地存储 会话存储
您可以将会话与 node.js 中的存储一起使用。例如,您有快速应用程序并希望在您的 web 应用程序中使用类似会话的系统。您可以为此使用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
以生成配置文件菜单为例。
对于您收到的每个请求,您都会相应地获得所有客户端 cookie。您还可以使用“Set-Cookie”在响应 HTTP 标头中设置客户端 cookie。
使用 GET 参数是不安全的。任何用户都可能意外共享他们的会话 ID,但如果您想要 100% 的安全性,我会通过 cookie 共享会话 ID,并且我会使用 HTTPS 来防止窥探者窃取 cookie。