2019.1.15

(一.)、 cookie技术和session技术
一.cookie技术
1.什么是cookie:就是用来记住网页登陆时的账户及密码,在浏览器上保存下来,当你选择记住密码后,在你设定的时间内,不需要再登陆。
简言之cookie是web服务器保存在客户端的一系列文本信息.
2、cookie作用
1.对特定对象的追踪. 商城网站记录购物者浏览对象。
2.保存用户网页浏览记录与习惯。
3.简化登录。
3、浏览器查看cookie
crome浏览器
打开Chrome
1.进入Chrome设置
2.找到【隐私设置】
3.进入【内容设置】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.cookie-parser中间件
步骤:
npm install cookie-parser;

var cookie = require(‘cookie-parser’);

app.use(cookie()); // 引cookie中间件

----cookie信息到客户端
res.cookie(‘user’, ‘admin’ , //名称,值
{
maxAge: 1000 * 60 * 60,
expires: ‘2020-1-1’,
path: ‘/’,
secure: false,
});

—获取保存在客户端的cookie信息
req.cookies.cookie-name

—清除cookie
res.clearCookie(cookie-name);
5. cookie实现记住密码

/*

  • 登录提交
    */
    userRouter.post(’/login.do’, function (req, res, next) {
    var userName = req.body.name;
    var passWord = req.body.password;
    var autoLogin = req.body.autoLogin;

var sql = ‘SELECT id,username,password FROM user WHERE username = ? AND password = ?’;
var parameters = [userName, passWord];
querydb(sql, parameters)
.then(function (data) {
if (data.length === 0) {
res.render(‘login’, {
‘message’: ‘用户名或密码出错!’,
});
} else {
// 登陆成功后将用户和密码写入Cookie,maxAge为cookie过期时间
if (autoLogin === ‘on’) {
res.cookie(‘user’, {
‘username’: req.body.name,
‘password’: req.body.password,
}, {
maxAge: 1000 * 60 * 60,
});
} else {
// 删除cookie
res.clearCookie(‘user’);
}
res.redirect(’/main.do’);
}
}).catch(next);
});

/**

  • 登录界面
    */
    userRouter.get(’/’, function (req, res) {
    if (req.cookies.user) {
    res.render(‘login’, {
    ‘user’: {
    ‘username’: req.cookies.user.username,
    ‘password’: req.cookies.user.password,
    },
    });
    } else {
    res.render(‘login’);
    }

});

后台管理中心

二、session技术
1.什么是session:当你登陆一个页面后,登陆之后你关闭了,在你写的时间内,你再次打开不需要在到登陆界面登陆。
2.理解session

Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端。购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立。
首先说明一点,在通常意义上,session所能发挥作用是基于cookie机制。针对所需要解释的问题,做这样一个假设:我们第一次访问一个网页。当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个session都会有一个sessionID。服务端会自动将这个sessionID作为一个cookie附加到response上返回给客户端,这个cookie存放在浏览器内存中。我们每次对此网页发送的request都会附带着这个cookie,服务端收到这个请求后会都去cookie中取得这个sessionID,然后查询服务端是否存在一个对应此ID的session对象。如果有,可以直接使用此session;如果没有,则会新建一个。当浏览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。
那当我们关闭浏览器之后,服务器端原来的session对象是否还存在呢?答案是肯定的。服务端根本不知道我们是否关闭了浏览器,也不关心这个。客户端与服务端之间进行通信的唯一途径就是通过请求。服务器有自己的一套机制来管理session,比如多长时间会清除没有使用过的session对象,等等。
所以说,关闭浏览器session就被清除只是我们所看到的表面现象(实际上是新建了一个session对象),通常情况下,服务器并不会马上清除session对象,但这个根据服务端的设定而不同。

    PS:cookie一般分为两种:一种是会话cookie,即服务端为session自动创建的cookie,这个cookie存放在浏览器进程中。另一种是可以存放在硬盘上的,可以通过服务端的某些设置,将一些信息放到cookie中并返回给客户端存放在硬盘上。 

3.express-session中间件
express-session中间件将会话数据存储在服务器上;它仅将会话标识(而非会话数据)保存在 cookie 中。从1.5.0版本开始, express-session不再依赖cookie-parser,直接通过req/res读取/写入;默认存储位置内存存储(服务器端),
安装: npm install express-session
var session = require(‘express-session’);
// 引入session中间件
app.use(session({ // 这里的name值得是cookie的name,默认cookie的name是:connect.sid
name: ‘web1803’,
secret: ‘websecret’,
cookie: ({
maxAge: 1000 * 60 * 60 * 24,
}),
// 重新保存:强制会话保存即使是未修改的。默认为true但是得写上
resave: true,
// 强制“未初始化”的会话保存到存储。
saveUninitialized: true,

}));

主要方法 : session(options)
通过option来设置session存储,除了session ID外,session中的任何数据都不存储在cookie中。

4.登录权限验证示例
// 保存登录状态到session
req.session.user = userName;

/**

  • 主界面
    */
    userRouter.get(’/main.do’, function (req, res, next) {
    console.log(‘req.session.user :’ + req.session.user);
    if (req.session.user) {
    res.render(‘index’, {
    ‘title’: ‘主界面’,
    ‘name’: ‘首页’,
    });
    } else {
    res.redirect(’/’); // 重定向到登录界面
    }
    });

/**

  • 退出
    */
    userRouter.get(’/logout.do’, function (req, res, next) {
    req.session.destroy(); // 销毁session
    res.redirect(’/’);
    });

三、 cookie与session区别

在这里插入图片描述

四、 重定向redirect传参与flash一起使用
1.flash:插入文本内容
引用connect-flash模块
var flash = require(‘connect-flash’);

// 设置flash,这步要在路由之前
userRouter.use(flash());

/**

  • 主界面
    */
    userRouter.get(’/main.do’, function (req, res, next) {
    // 判断session 状态,如果有效,则返回主页,否则转到登录页面
    if (req.session.username) {
    res.render(‘index’, {
    ‘title’: ‘主界面’,
    ‘name’: ‘首页’,
    });
    } else {
    req.flash(‘message’, ‘你还没有登录’); // 保存信息
    //req.session.msg = ‘您还没有登录,请登录11!’;
    res.redirect(’/’);
    }
    });

/**

  • 登录界面
    */
    userRouter.get(’/’, function (req, res) {
    var msg = req.flash(‘message’); // 获取信息之后销毁session中message对象
    //var msg = req.session.msg;
    console.log(‘msg :’ + msg);
    res.render(‘login’, {
    ‘message’: msg,
    ‘user’: {
    ‘username’: req.cookies.user.username,
    ‘password’: req.cookies.user.password,
    },
    });
    });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值