第9章 Cookie与会话

来源:互联网 发布:中信建投证券软件 编辑:程序博客网 时间:2024/06/05 00:12

Cookie与会话
HTTP是无状态协议。用cookie和会话,在HTTP上建立状态。
cookie: 服务器发送一点消息,浏览器在一段可配置的时期内保存它。发送哪些消息确实是由服务器来决定:通常只是一个唯一ID号,标识特定浏览器,从而维持一个有状态的假象。
*cookie对用户来说不是加密的
可以加密cookie、或使用签名cookie
*用户可以删除或禁用cookie
*一般的cookie可以被篡改
确保cookie不被篡改,请使用签名cookie
*cookie可以用于攻击
跨站脚本攻击(XSS)
*如果你滥用cookie,用户会注意到
*如果可以选择,会话要优于cookie

cookiet实现:
当服务器希望客户端保存一个cookie时,它会发送一个响应头Set-Cookie,其中包含名称/值对。
当客户端向服务器发送含有cookie的请求时,它会发送多个请求头Cookie,其中包含这些cookie的值。

9.1 凭证的外化
外化第三方凭证是一种常见的做法,易于维护,还可以让你的版本控制系统忽略这些凭证文件。

9.2 Express中的Cookie
引入中间件cookie-parser
然后:

app.use(require('cookie-parser')(credentials.cookieSecret));

设置cookie或签名cookie

res.cookie('monster','nom nom');res.cookie('signed_monster','nom nom',{signed:true});

获取客户端发送过来的cookie:

var monster = req.cookies.monster;var signedMonster = req.signedCookies.monster;

删除cookie

res.clearCookie('monster');

9.3 检查Cookie

9.4 会话
要实现会话,必须在客户端存些东西,否则服务器无法从一个请求到下一个请求中识别客户端。通常的做法是用一个包含唯一标识的cookie,然后服务器用这个标识获取相应的会话信息。
广义上实现会话的方法:
1、把所有东西都存在于cookie里,称为“基于cookie的会话”
2、只在cookie里存一个唯一标识,其他东西都存在服务器上。

9.4.1 内存存储
安装express-session,
引入:

app.use(require('cookie-parser')(credentials.cookieSecret));app.use(require('express-session')());

9.4.2 使用会话

req.session.userName = 'Anonymous';var colorScheme = req.session.colorScheme || 'dark';req.session.userName = null; //这会将“userName”设为null,但不会移除它。delete req.session.colorScheme; //这会移除‘colorScheme’

9.5 用会话实现即显消息

9.6 会话的用途
会话最常见的用法是提供用户验证信息,你登录后就会创建一个会话,之后就不用再每次重新加载页面时再登录一次。
因为有cookie才能用会话。

原创粉丝点击