PHP nodejs session,Nodejs中session的简单使用及通过session实现身份验证的方法

session 不用多介绍,使一个http可以对应一个终端用户。

session的本质使用cookie来实现。

原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用户身份的cookie, 再去固定地点(数据库,文件)检索出对应的用户身份。把身份赋值给本次请求的request,在程序处理中就知晓了用户的身份了。(在PHP,ASP或者其他服务端语言中都自动帮你实现了)

实现cookie

需要为每一个用户设置一个可以标示用户身份的cookie。可以使用如下规则

注册邮箱MD5值+密码MD5值+随机码MD5值。(仅仅举例,这可能并不是一个好的方案)

服务端代码片段:

res.setHeader("Set-Cookie", ["sid="+newUser.toCookie()+";path=/;domain="+config.domain+";expires="+new Date("2030") ]);

cookie

sid=275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee

使用 cookie 获取用户身份,设置session

把所有非静态资源的请求都定向到这里处理。获取cookie,把cookie拆分并在数据库查找符合条件的用户。最后使用 next 跳转到下一个请求逻辑。

下一个请求逻辑就可是直接使用 req.session.user 来获取 user 对象了。

session:function(req, res, next){

req.session = {};

if( req.cookies && req.cookies.sid ){

var a = req.cookies.sid.split("|");

var hexMail = a[0];

var hexPwd = a[1];

var hexRandom = a[2];

UserModel.hexFind(hexMail, hexPwd, hexRandom, function( status ){

//console.log("hexFind", status );

if(status.code == "0"){

//req.cookiesSelecter = cookiesSelecter;

req.session.user = status.result;

}

next();

});

}else{

next();

}

}

下面给大家说说nodejs通过session实现身份验证

nodejs express session 身份验证

1)引入模块

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

var cookieParser = require('cookie-parser');

2)应用cookie及session

app.use(cookieParser());

app.use(session({

resave: true, // don't save session if unmodified

saveUninitialized: false, // don't create session until something stored

secret: 'love'

}));

3)请求时,应用身份验证

app.use(function(req,res,next){

if (!req.session.user) {

if(req.url=="/login"){

next();//如果请求的地址是登录则通过,进行下一个请求

}

else

{

res.redirect('/login');

}

} else if (req.session.user) {

next();

}

});

4)登陆设计

app.get('/login',function(req,res){

res.render("login");

});

app.post('/login',function(req,res){

if(req.body.username=="love" && req.body.password=="love"){

var user = {'username':'love'};

req.session.user = user;

res.redirect('/admin/app/list');

}

else

{

res.redirect('/login');

}

});

app.get('/logout',function(req,res){

req.session.user = null;

res.redirect('/login');

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js使用MySQL来实现登录接口时,有以下几种使用session方法: 1. 使用express-session模块:该模块可以将session存储在数据库,而不是默认的内存存储。可以使用MySQL作为session存储的数据库,从而实现登录功能。具体实现步骤如下: - 安装express-session和mysql模块:npm install express-session mysql - 在应用程序引入express-session和mysql模块,并配置session存储方式为MySQL - 在登录成功后,将用户信息存储在session - 在需要验证登录状态的接口,获取session的用户信息,判断用户是否登录 示例代码: const session = require('express-session'); const MySQLStore = require('express-mysql-session')(session); const mysql = require('mysql'); const options = { host: 'localhost', port: 3306, user: 'root', password: 'password', database: 'session_test' }; const sessionStore = new MySQLStore(options); app.use(session({ secret: 'my_secret_key', resave: false, saveUninitialized: false, store: sessionStore })); app.post('/login', (req, res) => { const { username, password } = req.body; // 验证用户名密码 if (验证成功) { req.session.user = { username }; res.json({ code: 0, msg: '登录成功' }); } else { res.json({ code: -1, msg: '用户名或密码错误' }); } }); app.get('/user', (req, res) => { const user = req.session.user; if (user) { res.json({ code: 0, data: user }); } else { res.json({ code: -1, msg: '未登录' }); } }); 2. 使用express-mysql-session模块:该模块可以直接将session存储到MySQL数据库,无需手动存储。具体实现步骤与第一种方法类似,只是使用session存储方式不同。示例代码: const session = require('express-session'); const MySQLStore = require('express-mysql-session')(session); const options = { host: 'localhost', port: 3306, user: 'root', password: 'password', database: 'session_test' }; const sessionStore = new MySQLStore(options); app.use(session({ secret: 'my_secret_key', resave: false, saveUninitialized: false, store: sessionStore })); // 登录验证和获取用户信息的代码与第一种方法相同 3. 使用node-mysql-session模块:该模块可以将session存储在MySQL数据库,但需要手动存储和获取session。具体实现步骤如下: - 安装node-mysql-session模块:npm install node-mysql-session - 初始化MySQL连接池 - 在登录成功后,生成session ID,并将用户信息和session ID存储在MySQL数据库 - 在需要验证登录状态的接口,获取session ID,从MySQL数据库获取用户信息,并判断用户是否登录 示例代码: const mysql = require('mysql'); const MySQLStore = require('node-mysql-session')(session); const pool = mysql.createPool({ host: 'localhost', port: 3306, user: 'root', password: 'password', database: 'session_test' }); app.post('/login', (req, res) => { const { username, password } = req.body; // 验证用户名密码 if (验证成功) { const sessionId = 生成session ID; const user = { username }; const sql = 'INSERT INTO sessions(id, data) VALUES(?, ?)'; pool.query(sql, [sessionId, JSON.stringify(user)], (err, result) => { if (err) { res.json({ code: -1, msg: '登录失败' }); } else { res.json({ code: 0, msg: '登录成功' }); } }); } else { res.json({ code: -1, msg: '用户名或密码错误' }); } }); app.get('/user', (req, res) => { const sessionId = 获取session ID; const sql = 'SELECT * FROM sessions WHERE id = ?'; pool.query(sql, [sessionId], (err, result) => { if (err || result.length === 0) { res.json({ code: -1, msg: '未登录' }); } else { const user = JSON.parse(result[0].data); res.json({ code: 0, data: user }); } }); }); 以上是在Node.js使用MySQL来实现登录接口时,使用session的几种方法。具体使用哪种方法,可以根据实际需求和项目情况进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值