节点JS中的会话

我如何维护节点JS中的SESSIONS? 例如,我想使用Node Js在SESSION中存储UserID。 我怎样才能做到这一点在节点JS? 我也可以在PHP中使用Node JS SESSION吗?

我想要

<?php $_SESSION['user'] = $userId; ?> 

在节点Js。

首先安装会话

npm安装express-session –save

在服务器页面上初始化会话

var express = require('express');

var session = require('express-session');

var app = express();

app.use(session({secret:'ssshhhhh',saveUninitialized:true,resave:true}));

存储会话

SESS = req.session;

var user_id = 1;

sess.user_id = USER_ID;

访问会话

SESS = req.session;

sess.user_id

让我把问题分成两部分。

1.如何在节点JS中维护我的SESSIONS?
答:使用快速会话中间件来维护SESSIONS

2.我也可以在PHP中使用Node JS SESSION吗?
答:是的,您也可以在PHP中使用该会话,但请记住,您必须将该会话存储在数据库中。

ExpressJS拥有官方会话中间件 ,也是目前事实上的Node.js标准Web框架。


如果您希望自己实现会话支持,那么通常会按照每个请求执行实现:

  1. 检查cookie是否包含会话ID
    • 如果不是,则创build一个会话对象,该对象存储在内存,文件或数据库(或其组合)中,并在响应cookie中设置会话ID以匹配此对象的标识符。
    • 如果Cookie确实包含会话ID,请使用该ID查找会话对象。
  2. 将来自步骤1的获取/创build的对象作为请求的持久会话对象提供。

你还必须实现一些超时机制,这样会话对象一段时间后至less会从内存中被删除。

你可以使用快速会话中间件。 将它与connect-redis或connect-mongo结合起来,将会话存储在数据库中,如果内存对您有价值(如在云安装中),则可以节省内存。

https://github.com/expressjs/session

https://www.npmjs.com/package/express-sessions

如果你存储在说mongodb,使用php mongo驱动程序从那里拿起它。

你不需要自己去做。 nodeJS中有一些很棒的模块可以处理这种事情。

如前所述,您可以使用express来使用会话中间件。

不过,我build议你使用passportJS。 这个模块为你做了validation部分,有很多策略可以在你的网站上进行整合(使用facebook,google,twitter等login),并且使用serializeUser()deserializeUser() serializeUser()来自动处理所有会话内容。 deserializeUser()只要你需要的function。

你可以看看这里,在会话部分: http : //passportjs.org/docs/configure

现在保持一个会话现在更老你应该尝试使用JWT token ,这是非常有效和简单的。 但是仍然要在Node js中维护会话:

在您的Express Config中:

 var cookieParser = require('cookie-parser'); var session = require('express-session'); app.use(cookieParser()); app.use(session({ secret: 'secret', resave: true, saveUninitialized: true, rolling: true, cookie: { path: '/', maxAge: 60000 * 1000 }, name: 'SID' })); 

login后存储会话:

 var session = req.session; if (user) { session.user = user._id; session.save(); console.log(session); } 

从中间件检查会话:

 var session = req.session; if (session.user) { req.userid = session.user; next(); } else { return res.status(401).send({ code: 401, message: Constant.authentication_fails }); } 

希望你能清楚的了解会议。

您可以双向处理会话。

  1. 使用快速会话
  2. 使用JWT Web令牌并处理自己的会话(基于令牌的会话处理)。

我认为基于令牌的会话处理更重要,而不是使用快速会话。 扩展服务器时会出现问题,并且在单个设备login情况下也会出现问题。

为了检查我有基于令牌的会话Hanling节点js文件夹structure.You可以检查。 这可能会有所帮助