在Node中使用MemoryStore存储会话数据,类似于$ _SESSION ['data'] = PHP中的值
问题描述:
是否可以存储类似于$ _SESSION ['somedata'] =您好在PHP中的会话数据?
Is it possible to store session data similar to $_SESSION['somedata'] = "Hello" in php?
这是我的代码到目前为止:
Here is my code so far:
创建内存商店
var MemoryStore = express.session.MemoryStore,
sessionStore = new MemoryStore();
Express Config
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
store: sessionStore,
secret: 'secret',
key: 'express.sid'}));
app.use(require('stylus').middleware({src: __dirname + '/public'}));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
解析cookie以获取握手授权的会话ID
var parseCookie = require('connect').utils.parseCookie;
io.set('authorization', function (data, accept) {
if (data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
sessionStore.get(data.sessionID, function (err, session) {
if (err)
{
accept(err.message, false); //Turn down the connection
}
else
{
data.session = session; //Accept the session
accept(null, true);
}
});
} else {
return accept('No cookie transmitted.', false);
}
});
当密码和用户名为admin时,存储登录 / p>
Storing 'loggedin' when the password and username are 'admin'
io.sockets.on('connection', function (socket) {
socket.on('details', function(data){
console.log("Details: " + data.u + data.p);
if(data.p == "admin" && data.u == "admin")
{
//Add the logged in field to the session
}
});
});
如果用户登录将其重定向到主页 p>
If the user is logged in redirect them to the home page
app.get(navigation.login.uri, function(req, res){
if(req.session.loggedin)
{
res.redirect('/home');
}
else
{
res.render('login', {
title: navigation.login.title,
navigation: navigation
});
}
});
当我尝试使用:
req.session.loggedIn
值未定义。这可能是一个存储问题,还是我访问不正确?
答
这对我有用 - 你基本上只需要在sessionStore中设置一个键:
This worked for me - you basically just have to set a key in the sessionStore:
io.sockets.on('connection', function (socket) {
socket.on('details', function(data){
console.log("Details: " + data.u + data.p);
if(data.p == "admin" && data.u == "admin")
{
// set the value
sessionStore.loggedIn = true;
// get the value
console.log(sessionStore.loggedIn);
}
});
});
我在一些网页上尝试了一些子页面,值一致。强制重新加载或关闭浏览器将重置。
I tried it on a website with some subpages, the value was consistent. A forced reload or closing the browser resets it.