1. Cookie 简介
- cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域
名的时候共享数据; - HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页
面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何
关系的; -
cookie保存在浏览器客户端;
-
可以让我们用同一个浏览器访问同一个域名的时候共享数据;
-
1、保存用户信息
2、浏览器历史记录
3、猜你喜欢的功能
4、10天免登陆
5、多个页面之间的数据传递
6、cookie实现购物车功能
2. Koa中Cookie的使用
// 1. Koa 中设置 Cookie 的值
ctx.cookies.set(name, value, [options]); // 通过 options 设置 cookie name 的 value
// 2. Koa 中获取 Cookie 的值
ctx.cookies.get('name');
// 3. Koa 中设置中文 Cookie
new Buffer('中文').toString('base64'); // 将中文转成base64字符串,存入cookie
new Buffer('aGVsbG8sIHdvcmxkIQ==', 'base64').toString(); // 还原成‘中文’
var Koa = require('koa'),
router = require('koa-router')(),
render = require('koa-art-template'),
path = require('path');
var app = new Koa();
//配置 koa-art-template模板引擎
render(app, {
root: path.join(__dirname, 'views'), // 视图的位置
extname: '.html', // 后缀名
debug: process.env.NODE_ENV !== 'production' //是否开启调试模式
});
router.get('/', async (ctx) => {
ctx.cookies.set('userinfo', 'zhangsan2222', { // 2. 设置cookies
maxAge: 60 * 1000 * 60, // 一般只需配置 maxAge
// path:'/news', /*配置可以访问的页面*/
//domain:'.baidu.com' /*正常情况不要设置 默认就是当前域下面的所有页面都可以方法*/
// httpOnly: false, //true表示这个cookie只有服务器端可以访问,false表示客户端(js),服务器端都可以访问
});
let list = {
name: '张三'
}
await ctx.render('index', {
list: list
});
})
router.get('/news', async (ctx) => {
var userinfo = ctx.cookies.get('userinfo'); // 3. 获取cookies
console.log(userinfo);
let app = {
name: '张三11'
};
await ctx.render('news', {
list: app
});
})
router.get('/setZh', async (ctx) => {
//koa中没法直接设置中文的cookie,需先将中文转成base64
var userinfo = new Buffer('张三').toString('base64');
ctx.cookies.set('userinfo_zh', userinfo, { // 4. 设置 中文 cookie
maxAge: 60 * 1000 * 60
});
let list = {
name: '张三'
}
await ctx.render('index', {
list: list
});
})
router.get('/getZh', async (ctx) => {
var data = ctx.cookies.get('userinfo_zh');
var userinfo = new Buffer(data, 'base64').toString(); // 5. 获取 cookie 还原成 中文
console.log(userinfo);
let app = {
name: '张三11'
};
await ctx.render('news', {
list: app
});
})
app.use(router.routes()); /*启动路由*/
app.use(router.allowedMethods());
app.listen(3000);
3. Cookie 的 options 设置