如何在Node JS中维护我的SESSIONS?例如,我想使用Node Js在SESSION中存储UserID。我怎么能在Node JS中做到这一点?我也可以在PHP中使用Node JS SESSION吗?
我想要
<?php $_SESSION['user'] = $userId; ?>
在Node Js。
答案 0 :(得分:13)
首次安装会话
npm install 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 :(得分:8)
让我将你的问题分成两部分。
1.如何在Node JS中维护我的SESSIONS?
答案:使用express-session middleware来维护会话
2.我也可以在PHP中使用Node JS SESSION吗?
的答案:强>
是的,您也可以在PHP中使用该会话,但请记住,您必须将该会话存储在数据库中。
答案 2 :(得分:6)
ExpressJS has official session middleware,它也是Node.js当前事实上的标准Web框架。
如果您希望自己实现会话支持,这就是每次请求时通常执行的方式:
您还必须实现一些超时机制,以便在一段时间后删除会话对象,至少从内存中删除。
答案 3 :(得分:3)
您可以使用快速会话中间件。 将它与connect-redis或connect-mongo结合使用可将会话存储在数据库中,并在内存对您有价值时节省内存(如在云设置中)。
https://github.com/expressjs/session
https://www.npmjs.com/package/express-sessions
如果你把它存放在mongodb中,请使用php mongo驱动程序从那里拿起它。
答案 4 :(得分:1)
你自己不需要这样做。 nodeJS中有一些令人惊叹的模块可以为您处理这类事情。
如前所述,您可以使用express中的会话中间件。
但是,我建议您使用passportJS。此模块为您执行身份验证部分,有许多策略可以集成到您的网站中(使用Facebook,Google,Twitter等登录等),并使用serializeUser()
自动处理所有会话内容deserializeUser()
随时随地发挥作用。
答案 5 :(得分:0)
要保持会话现在已经过时你应该尝试使用JWT token
,这非常有效且容易。但仍然要在Node js中维护会话:
在快速配置中
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'
}));
登录后存储会话:
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
});
}
希望你能清楚了解会话。
答案 6 :(得分:0)
允许访问/允许查看用户区域的会话,它也是一个凭证,因此我们可以在应用程序上使用它。我使用jsonwebtoken制作了一个令牌,该令牌将在用户成功登录后随时间显示用户的详细信息。我将其存储在redis中,可以用于预先声明的时间限制。
答案 7 :(得分:0)
执行以下步骤:
1. npm install express-session --save
2. Write below code:
var express = require('express');
var session = require('express-session');
var app = express();
app.use(session({secret: 'your secret key', saveUninitialized: true, resave: true}));
var userId = 1234;
app.get('/', function (req, res, next) {
req.session.userId = userId;
});
答案 8 :(得分:0)
在NODE JS中存储会话非常简单,但是您需要了解它的步骤,可以手动处理,也可以使用几个NPM模块。 Passport可以帮助您进行身份验证以及登录和存储会话,我建议您阅读其文档,Passport允许您使用其他类似Google,github的其他平台对用户进行身份验证。
如果您要使用护照,请在NPM模块下面使用这些密码
2-将这些模块导入您的主app.js
const flash = require('express-flash')
const session = require('express-session')
const passport = require('passport')
app.use(session({
secret:'secret',
resave:false,
saveUninitialized:false
}))
app.use(flash())
app.use(passport.initialize())
app.use(passport.session())
3-创建passport.js文件,您可以命名任何东西,因此这背后的基本理解是,您必须检查来自输入表单的有效用户,如果有效,则必须将电子邮件ID与模型进行比较输入密码,然后返回用户。完成后,序列化和反序列化您的用户以存储在会话中。 我建议检查文档中的这一部分以获得更清晰的理解。 http://www.passportjs.org/docs/downloads/html/
const localStretgy = require('passport-local').Strategy
const bycrypt = require('bcrypt')
const User = require('../model/User')
const initalize = function(passport){
const auth = async(email,password,done)=>{
try {
const user = await User.findOne({email:email})
if(!user){
throw new Error("Incorrect Email ..!")
}
const match = await bycrypt.compare(password,user.password)
if(!match){
throw new Error('Incorrect Password..!')
}
return done(null,user)
} catch (error) {
console.log(error)
done(null,false,error)
}
}
passport.use(new localStretgy({usernameField:'email'},auth))
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
}
module.exports = initalize
现在转到您的登录路由器,使用以下代码
常量护照= require('passport')
require('../passport/passport')(passport)
routes.get('/signin',(req,res)=>{
res.render('signin',{
pageTitle:'sign in'
})
})
routes.post('/signin',passport.authenticate('local',{
successRedirect:'/welcome',
failureRedirect:'/',
failureFlash:true
}))
答案 9 :(得分:0)
您可以通过使用 node js 中的 'express-session' 包在 node js 中使用 session。 你必须在你的应用程序中安装 express 和 express-session
const express = require('express');
const session = require('express-session');
const app = express();
"secret" 用于 cookie,我们必须添加一些秘密来管理会话。 “请求”我们使用请求变量,就像我们在 PHP 中使用 $_SESSION 一样。
var sess;
app.get('/',function(req,res){ // get request from app side
sess=req.session;
sess.email; // equivalent to $_SESSION['email'] in PHP.
sess.username; // equivalent to $_SESSION['username'] in PHP.
});
如果您想详细了解节点 JS 中的会话,请参阅 Code for Geek 中有关节点 JS 中会话的完整文档。
答案 10 :(得分:-1)
您可以双向处理会话。
我认为基于令牌的会话处理比使用快速会话更重要。扩展服务器时会出现问题,而单个设备登录情况也会出现问题。
For Checking我有Token Based Session Hanling node js文件夹结构。你可以查看。 这可能会有所帮助