Cookie 简介 ●
● HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何 关系的。
● Cookie 是一个简单到爆的想法:当访问一个页面的时候,服务器在下行 HTTP 报文中, 命令浏览器存储一个字符串; 浏览器再访问HTTP 请求中。第一次访问一个服务器,不可能携带 cookie。 必须是服务器得到这次请求, 在下行响应报头中,携带 cookie 信息,此后每一次浏览器往这个服务器发出的请求,都会 携带这个 cookie。
Cookie 特点
● cookie 保存在浏览器本地
● 正常设置的 cookie 是不加密的,用户可以自由看到;
● 用户可以删除 cookie,或者禁用它
● cookie 可以被篡改
● cookie 可以用于攻击
● cookie 存储量很小。未来实际上要被 localStorage 替代,但是后者 IE9 兼容。
Cookie 的使用
/*
cookie-parser可以设置和获取cookie
1.安装 cnpm instlal cookie-parser --save
2.引入var cookieParser = require('cookie-parser');
3.设置中间件
app.use(cookieParser());
4.设置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认false不允许 客户端脚本访问
5.获取cookie
req.cookies.name
* */
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get("/",function(req,res){
console.log(req.cookies);
res.send("你好nodejs");
});
app.get("/news",function(req,res){
console.log(req.cookies);
res.send("你好nodejs news");
});
app.get("/set",function(req,res){
//参数1:名字
//参数2:cookie的值
//参数3:cookie的配置信息
res.cookie('username','cookie的值',{maxAge:60000});
res.send("设置cookie成功");
});
app.listen(3001,'127.0.0.1');
/*
cookie-parser可以设置和获取cookie
1.安装 cnpm instlal cookie-parser --save
2.引入var cookieParser = require('cookie-parser');
3.设置中间件
app.use(cookieParser());
4.设置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认false不允许 客户端脚本访问
5.获取cookie
req.cookies.name
cookie保存在浏览器本地 如果没有过期的话关闭浏览器在打开cookie还是存在的
baidu.com 域名
news.baidu.com
www.baidu.com
aaa.com
news.aaa.com
www.aaa.com
//domain:'.aaa.com' 多个二级域名共享cookie
* */
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get("/",function(req,res){
console.log(req.cookies);
res.send("你好nodejs");
});
app.get("/news",function(req,res){
console.log(req.cookies);
res.send("你好nodejs news");
});
app.get("/set",function(req,res){
//参数1:名字
//参数2:cookie的值
//参数3:cookie的配置信息
res.cookie('username','cookie的值111',{maxAge:600000,domain:'.aaa.com'});
res.send("设置cookie成功");
});
app.listen(3001,'127.0.0.1');
/*
cookie-parser可以设置和获取cookie
1.安装 cnpm instlal cookie-parser --save
2.引入var cookieParser = require('cookie-parser');
3.设置中间件
app.use(cookieParser());
4.设置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认false不允许 客户端脚本访问
5.获取cookie
req.cookies.name
cookie保存在浏览器本地 如果没有过期的话关闭浏览器在打开cookie还是存在的
baidu.com 域名
news.baidu.com
www.baidu.com
aaa.com
news.aaa.com
www.aaa.com
domain:'.aaa.com' 多个二级域名共享cookie
path 表示在哪个路由下面可以访问cookie
httpOnly:true 设置为true,表示只有在nodejs服务端可以操作cookie ,没法用js脚本语言操作cookie
* */
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get("/",function(req,res){
console.log(req.cookies);
res.send("你好nodejs");
});
app.get("/news",function(req,res){
console.log(req.cookies);
res.send("你好nodejs news");
});
app.get("/set",function(req,res){
//参数1:名字
//参数2:cookie的值
//参数3:cookie的配置信息
res.cookie('userinfo','cookie111',{maxAge:600000,path:'/news',httpOnly:true});
res.send("设置cookie成功");
});
app.listen(3001,'127.0.0.1');
设置 cookie
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })
res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true }); res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
获取 cookie
req.cookies.name
删除cookie
res.cookie('rememberme', '', { expires: new Date(0)});
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});
加密 Cookie
1.配置中间件的时候需要传参
var cookieParser = require('cookie-parser');
app.use(cookieParser('123456'));
2.设置 cookie 的时候配置 signed 属性
res.c ookie('userinfo','hahaha',{domain:'.c cc.c om',maxAge :900000,httpOnly :true,signed :true});
3. signedCookies 调用设置的 cookie
console.log(req.signedCookies);
demo:
/*
cookie-parser可以设置和获取cookie
1.安装 cnpm instlal cookie-parser --save
2.引入var cookieParser = require('cookie-parser');
3.设置中间件
app.use(cookieParser());
4.设置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认false不允许 客户端脚本访问
5.获取cookie
req.cookies.name
cookie保存在浏览器本地 如果没有过期的话关闭浏览器在打开cookie还是存在的
aaa.com
news.aaa.com
www.aaa.com
maxAge 过期时间
domain:'.aaa.com' 多个二级域名共享cookie
path 表示在哪个路由下面可以访问cookie
httpOnly:true 设置为true,表示只有在nodejs服务端可以操作cookie ,没法用js脚本语言操作cookie
signed属性设置成true 表示加密cookie信息
让用户看不到cookie明文信息
1.保存的时候加密
2.cookie-parser里面 signed属性设置成true
cookie的加密:
1.参数表示加密的随机字符串
app.use(cookieParser('sign'));
2.设置
res.cookie('userinfo','cookie222_info',{maxAge:600000,signed:true});
3.使用 获取
req.signedCookies
* */
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser('sign'));
app.get("/",function(req,res){
//console.log(req.cookies);
console.log(req.signedCookies); /*获取加密的cookie信息*/
res.send("你好nodejs");
});
app.get("/set",function(req,res){
//参数1:名字
//参数2:cookie的值
//参数3:cookie的配置信息
res.cookie('userinfo','cookie222_info',{maxAge:600000,signed:true});
res.send("设置cookie成功");
});
app.listen(3001,'127.0.0.1');
案例:
/*
* cookie-parser可以设置和获取cookie
1.安装 cnpm instlal cookie-parser --save
2.引入var cookieParser = require('cookie-parser');
3.配置中间件
app.use(cookieParser());
4.设置cookie
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true});
//HttpOnly 默认false不允许 客户端脚本访问
5.获取cookie
req.cookies.name
*
* */
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get("/",function(req,res){
res.send("您浏览过的城市-"+req.cookies.citys);
});
/*您浏览过的城市 /lvyou?city=北京 /lvyou?city=上海 /lvyou?city=杭州 /lvyou?city=重庆 */
app.get("/lvyou",function(req,res){
//写入数据要做判断
var city=req.query.city; /*获取当前城市*/
var citys=req.cookies.citys; /*数组 获取所有的城市*/
if(citys){
citys.push(city)
}else{
citys=[]; /*没有浏览过任何城市的话 citys改为数组 */
citys.push(city)
}
res.cookie('citys',citys,{maxAge:60*1000*10});
res.send("您浏览的城市是"+city);
});
app.listen(3001);