1.cookie是存储于访问者的计算机中的数据,用于同一浏览器访问同一域的时候共享数据
2.HTTP是无状态协议。也就是说:当你浏览了一个页面,然后跳转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每次的访问是没有关系的,也就是说服务器无法检测到这个状态
cookie特点:保存在客户端、用于同一浏览器访问同一个域的时候共享数据
作用,例如:
1.保存用户信息
2.浏览历史记录
3.10天免登录
正文开始
1.koa中设置cookie的值
1.设置cookie:
router.get('/', async (ctx, next) => {
ctx.cookies.set("userInfo","gouzi",{
maxAge:1000*60*60
})
await ctx.render('index', {
title: 'Hello Koa 啊啊啊啊!'
})
})
2.获取cookie:
let userInfo = ctx.cookies.get("userInfo");
设置cookie的第三个对象里面参数
3.存储值为汉字的cookie(nodejs的cookie是不支持直接存储汉字的)
先转化为buffer(let a = new Buffer(“张三”))
router.get('/', async (ctx, next) => {
let name = new Buffer("狗子").toString('base64')
ctx.cookies.set("userInfo",name,{
maxAge:1000*60*60
})
})
再转化为汉字字符串(.toString())
router.get('/test', async (ctx, next) => {
//从ctx里面获取get传值,query是格式化之后的,querystring是字符串的
console.log(ctx.query)
let userInfo = ctx.cookies.get("userInfo");
let name = new Buffer(userInfo,'base64').toString()
console.log(name)
//ctx里面的request对象是那一大串东西
ctx.body = 'koa2 string'
})
2.koa session的使用(包名:koa-session):
session是基于cookie的原理
1.安装
npm install koa-session
2.引入
const session = require('koa-session')
3.配置中间件
app.keys = ['some secret hurr']; /* cookie的签名 默认的(不用管)*/
const CONFIG = {
key: 'koa:sess', /* 默认的cookie签名,默认的(不用管) */
maxAge: 86400000,/* cookie的最大过期时间 */
renew: true, /** cookie(session)快过期时自动重新设置*/
rolling: false, /** 每次请求强行更新设置cookie(session),使他不过期 */
httpOnly: true, /** 是否只有服务端能访问 */
signed: true, /** 默认签名与否 */
overwrite: true, /** 无效属性 */
autoCommit: true, /** (boolean) automatically commit headers (default true) */
};
app.use(session(CONFIG, app));
4.使用
router.get('/login', function (ctx, next) {
ctx.session.username="狗子" //设置session
ctx.body = '登陆成功'
})
router.get('/buy', async (ctx, next)=> {
console.log(ctx.session.username) //读取session
ctx.body = 'this is a users response!'
})
cookie和session的区别如下:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据。
4、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
6、session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。
注:为这个用户创建的Cookie的名称是aspsessionid。这个Cookie的唯一目的就是为每一个用户提供不同的身份认证。
7、cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?
例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。
使用cookie和session的具体场景
一般来说,登陆验证信息,客户的私人信息,如姓名,电话等,应该放在Session中.Cookie则用于用户登陆网站时的自动登陆以及类似"购物车"的处理.使用Cookie保存信息时最好通过加密形式来保存数据,同时是否保存登陆信息,需要由用户自行选择