节点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框架。
如果您希望自己实现会话支持,那么通常会按照每个请求执行实现:
- 检查cookie是否包含会话ID
- 如果不是,则创build一个会话对象,该对象存储在内存,文件或数据库(或其组合)中,并在响应cookie中设置会话ID以匹配此对象的标识符。
- 如果Cookie确实包含会话ID,请使用该ID查找会话对象。
- 将来自步骤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 }); }
希望你能清楚的了解会议。
您可以双向处理会话。
- 使用快速会话
- 使用JWT Web令牌并处理自己的会话(基于令牌的会话处理)。
我认为基于令牌的会话处理更重要,而不是使用快速会话。 扩展服务器时会出现问题,并且在单个设备login情况下也会出现问题。
为了检查我有基于令牌的会话Hanling节点js文件夹structure.You可以检查。 这可能会有所帮助