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也没法工作

使用cookie/session实现简单的用户信息的保存的更多相关文章

  1. 微信小程序 获取用户信息并保存登录状态

    微信小程序 获取用户信息并保存登录状态:http://www.360doc.com/content/18/0124/11/9200790_724662071.shtml

  2. jsonp跨域实现单点登录,跨域传递用户信息以及保存cookie注意事项

    网站A:代码:网站a的login.html页面刷新,使用jsonp方式将信息传递给b.com的login.php中去,只需要在b.com中设置一下跨域以及接收参数,然后存到cookei即可, 注意:网 ...

  3. Laravel OAuth2 (一) ---简单获取用户信息

    前言 本来要求是使用微信进行第三方登陆,所以想着先用 github 测试成功再用微信测试,可是最近拖了好久都还没申请好微信开放平台的 AppID ,所以就只写 github 的第三方登陆吧,估计微信的 ...

  4. Excelpackage的简单使用(导出用户信息并保存)

    EPPlus介绍 EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件,在导出Excel的时候不需要电脑上安装office. ...

  5. java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)

    1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...

  6. Java Web学习总结(6)Cookie/Session

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 二.会话过程中要解决的一些问题 每个用户在使用浏览器与服务器进行 ...

  7. Django之cookie+session

    前言 HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览器,以此记录客户端状态: cook是来自服务端,保存在浏览器的键值对,主要应用于用户登录 ...

  8. session和cookie的区别和联系详解,Cookie Session相关看这篇就够了。

    本文转自:91博客:原文地址:http://www.9191boke.com/199015867.html 有一朋友做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么 ...

  9. php之将用户信息写入数据库

    session高级应用将用户信息写入到数据库中 首先建立数据库表 在实验数据库sqldb中建立session表,用于存储数据 在根文件夹下建立须要用到的文件(重点是session,class.php这 ...

随机推荐

  1. Python:pyglet学习(2)图形的旋转&batch

    这次讲讲图形的旋转和批量渲染(rotate.batch) 1:图形旋转 先看看上次的代码中的一段: glRotatef(rot_y, 0, 1, 0) glRotatef(rot_z,0,0,1) g ...

  2. VUE-表单验证

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. RocketMQ 事务消息示例分析

    @ 目录 1 示例模式 2 安装与配置 RocketMQ 3 运行服务 3.1 启动 NameServer 3.2 启动 broker 4 生产者 4.1 事务监听器 4.2 事务消息生产者 5 消费 ...

  4. 解决metasploit的module load fail

    解决metasploit的module load fail 在exploits文件夹下面新建一个文件夹test 把你要用的rb文件放进去 reload_all 就行了

  5. libpcap -学习1

    1.今天学到的最重要一点就是指定是否打开混杂模式(Promiscuous Mode),0表示非混杂模式,任何其他值表示混合模式.如果要打开混杂模式,那么网卡必须也要打开混杂模式,可以使用如下的命令打开 ...

  6. k8s集群搭建过程详解

    准备工作 安装CentOS7虚拟机 略 安装Docker 略 关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewall ...

  7. 『现学现忘』Docker基础 — 35、实战:自定义CentOS镜像

    目录 1.前提说明 2.编写Dockerfile文件 3.构建镜像 4.运行镜像 5.列出镜像的变更历史 1)目标:自定义镜像wokong_centos. 2)所用到的保留字指令: FROM:基础镜像 ...

  8. Oracle入门基础(三)一一单行函数

    SQL> --字符函数 SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world ...

  9. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

    可以在@RequestMapping注解里面加上method=RequestMethod.GET.

  10. 在chrome浏览器英文环境下为什么上面现行代码不起作用?

    因为后面的客户端区域会覆盖前面的用户区域所以上面现行代码不起作用