cookie一般用来存储非关键信息 , 用户名和密码等敏感信息一般采用session 来存储;cookie和session的最大区别是当服务器端存储session 之后,用户再次请求时候只是请求了一个sessionID,这样敏感信息泄露的可能性就大大降低。但是session是基于cookie的,服务器首次接受到用户请求之后, 会将信息生成一个sessionID,将sessionID返回给客户端,后续所有的请求,都是发送这个sessionID给服务器。这就和你去商场办卡之后只需要验证手机号码就可以享受优惠是一样的道理。
在nodejs中 ,cookie的使用需要安装第三方中间件 cookie-parser,而session的使用需要安装第三方中间件express-session !
session的使用方法如下:
var app = express() ; app.set('trust proxy',1); app.use(session({ secret: 'keybord cat', //任意信息 resave : false, saveUninitialized:true, cookie: { secure:true } //必须是true })); 之后可以使用req.session 来获取内容了
使用cookie实现的登录控制如下
'use strict'; const express = require('express'); const path = require('path'); //引入bodyParser 来获取用户的登录信息 const bodyParser = require('body-parser'); //引入cookie-parser 来记录用户的登录信息 const cookieParser = require('cookie-parser'); const app = express(); //使用cookie来验证用户是否登录 //逻辑 : 首先进入首页面。然后点击用户中心 // 进入用户中心的时候需要判断是否已经登录 //如果用户已经登录 则直接进入用户中心页面 。包含欢迎回来 ,注销按钮 //如果没有登录,则重定向到登录页面; //验证账户密码;如果正确; 则进入用户中心, 否则返回登录页面 //使用第三方插件 cookieparser 和bodyParser app.use(cookieParser()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.get('/', (req, res) => { res.send('<p>欢迎来到首页<a href="/user">用户中心</a></p>'); }); //进入login页面的时候需要直接发送login.HTML app.get('/login', (req, res) => { res.sendFile(path.join(__dirname, 'login.html')); }); //处理用户输入的信息 app.post('/signin', (req, res) => { let username = req.body.username; let pwd = req.body.pwd; if (username == 'admin' && pwd == '123') { //设置cookie res.cookie('isLogin', 1, { maxAge: 60000 }); //进入用户中心页面 res.redirect('/user'); } else { res.redirect('/login'); } }); app.get('/user', (req, res) => { // 进入用户中心的时候需要判断是否已经登录 if (req.cookies.isLogin) { res.send('欢迎来到用户中心<a href="/logout">注销</a>') } else { res.redirect('/login'); } }) app.get('/logout', (req, res) => { res.clearCookie('isLogin'); res.send('注销成功<a href="/user">返回</a>') }); app.listen(3001, (req, res) => { console.log('3001 port is on'); });
使用session实现简单的登录控制代码如下
'use strict'; const express = require('express'); const path = require('path'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const session = require('express-session'); const app = express(); app.use(cookieParser()); app.use(bodyParser()); app.use(bodyParser.urlencoded({ extended: false })); app.use(session({ secret: 'qq', resave: false, saveUninitialized: true, cookie: {} })); //首页面 app.get('/', (req, res) => { res.send('<h2>欢迎来到首页点击进入<a href="/user">用户中心</a></h2>'); }); //处理登录动作 app.post('/signin', (req, res) => { //获取用户名和密码 let username = req.body.username; let pwd = req.body.pwd; if (username == 'admin' && pwd == '123') { req.session.isLogin = 1; req.session.username = username; res.redirect('/user'); } else { res.redirect('/login.html'); } }); //用户中心 app.get('/user', (req, res) => { if (req.session.isLogin) { res.send(`<h2>${req.session.username},欢迎回来!<a href='/logout'>注销</a></h2>`) } else { res.redirect('/login'); } }); //登录页面 app.get('/login', (req, res) => { //直接重定向到login.html res.sendFile(path.join(__dirname, 'login.html')); }); //注销页面 app.get('/logout', (req, res) => { req.session.destroy(); res.redirect('/'); }); app.listen(3000, () => { console.log('3000 port is on'); });
ps:没有cookie session也没法工作