使用cookie/session实现简单的用户信息的保存
2024-09-03 23:45:27
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也没法工作
最新文章
- Eclipse添加jsp页面后引入java指令报错解决方法
- hdu 1718 Rank
- WPF中增加Month Calendar月历控件
- SCGHR 分析思路
- 4、第4次课 CSS代码第三节课20150923
- Cipher(置换群)
- [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet
- CS Round#53 E Maxor
- python/数据库操作补充—模板—Session
- Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】问题调查
- CSS之使用display:inline-block来布局
- 数据流图——从软考真题中学画数据流图DFD
- QEMU KVM libvirt 手册(1): 安装
- 兄弟连Linux运维学习笔记
- Java提高篇之理解java的三大特性——继承
- No module named flask.ext.script 解决方法
- java第五节 多线程/多线程的同步
- [转]手把手教你--Bootstrap Table表格插件及数据导出(可导出Excel2003及Exce2007)
- sbt使用详解
- hive操作