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. 同事都说有SQL注入风险,我非说没有

    前言 现在的项目,在操作数据库的时候,我都喜欢用ORM框架,其中EF是一直以来用的比较多的:EF 的封装的确让小伙伴一心注重业务逻辑就行了,不用过多的关注操作数据库的具体细节.但是在某些场景会选择执行 ...

  2. windows2008R2重建索引

    windows索引服务 索引服务是一项系统服务(Indexing Service),使用文档筛选器读取整个文档,并提取文档和属性传递给索引程序,这个过程称为"索引".索引服务可以从 ...

  3. Casbin入选2022 Google编程之夏

    Casbin入选2022 Google编程之夏! Google编程之夏(Google Summer of Code,GSoC),是由Google公司所主办的年度开源程序设计项目,第一届从2005年开始 ...

  4. 三层PetShop架构设计

    <解剖 PetShop >系列之一 前言:   PetShop 是一个范例,微软用它来展示 .Net 企业系统开发的能力.业界有许多 .Net 与 J2EE 之争,许多数据是从微软的 Pe ...

  5. 【深度学习 01】线性回归+PyTorch实现

    1. 线性回归 1.1 线性模型 当输入包含d个特征,预测结果表示为: 记x为样本的特征向量,w为权重向量,上式可表示为: 对于含有n个样本的数据集,可用X来表示n个样本的特征集合,其中行代表样本,列 ...

  6. svn 清理报错

    Can't install '*' from pristine store, because no checksum is recorded for this file svn同步时,提示clean ...

  7. 什么是 YAML?

    YAML 是一种人类可读的数据序列化语言.它通常用于配置文件. 与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加 结构化,而且更少混淆.可以看出 YAML 具有分层配置数据 ...

  8. kafka消费组创建和删除原理

    0.10.0.0版本的kafka的消费者和消费组已经不在zk上注册节点了,那么消费组是以什么形式存在的呢? 1 入口 看下kafka自带的脚本kafka-consumer-groups.sh,可见脚本 ...

  9. Java中的引用类型

    强引用(Strong) 就是我们平时使用的方式 A a = new A();强引用的对象是不会被回收的 软引用(Soft) 在jvm要内存溢出(OOM)时,会回收软引用的对象,释放更多内存 弱引用(W ...

  10. 数据库中的ACID

    参考链接:什么是ACID 数据库中的锁机制