Node中使用MemoryStore存储session数据,类似于PHP中的$

编程入门 行业动态 更新时间:2024-10-04 15:38:52

Node中使用MemoryStore存储session数据,<a href=https://www.elefans.com/category/jswz/34/1771241.html style=类似于PHP中的$"/>

Node中使用MemoryStore存储session数据,类似于PHP中的$

问题:

是否可以在php中存储类似于$_SESSION['somedata'] = "Hello"的session数据?

到目前为止,这是我的代码:

创建内存存储

var MemoryStore = express.session.MemoryStore,
    sessionStore = new MemoryStore();

快速配置

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”时存储“loggedin”

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
    }
  });
});

如果用户已登录,将他们重定向到主页

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

该值未定义。这可能是存储问题,还是我访问不正确?

回答如下:

你很接近 - 只是缺少一些东西。

您在套接字授权功能中收集的信息可通过连接处理程序中的 socket.handshake 访问。

所以,我想你想要的是:

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
      socket.handshake.session.loggedIn = true;  // Set the new session var
      socket.handshake.session.save();           // Save the modified session
    }
  });
});

修改后不要忘记保存会话,否则它永远不会回到商店中。

更多推荐

Node中使用MemoryStore存储session数据,类似于PHP中的$

本文发布于:2024-05-30 19:22:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770834.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:类似于   数据   MemoryStore   Node   PHP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!