本笔记记录cookie缓存相关知识点
cookie简介:
- cookie是存储于访问者的计算机中的变量,可以在同一游览器访问同一个域名的时候共享数据。
- 因为HTTP是无状态的协议,从一个游览页面转到同一个域名下的另一个页面,服务器是无法识别这是同一个游览器在访问同一个页面,每次访问的页面与页面之间是没有关系的。因此,cookie缓存在其中可以建立页面与页面之间的联系,将一个页面的变量存放起来,在同一个域名下另外一个页面中也能正常使用。
- w3s官方说的更易懂一点,cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个
cookie。 - cookie 是访问过的网站创建的文件,用于存储浏览信息,例如个人资料信息。
cookie的特点:
- 保存位置是在本地游览器。
- 正常设置的cookie是不加密的,用户可以自由看到。
- 用户可以主动删除cookie,或者禁用。
- cookie可以被篡改或用于攻击。
- cookie的存储量很小,每个 cookie 所存放的数据不能超过4kb,未来实际上会被localStorage替代。
cookie的使用:这里通过具体代码进行解释
// 客户端游览器存储cookie的使用
// 使用cookie-parser模块进行存储操作
// 引入express框架,方便搭建服务器
let express = require('express');
// 搭建服务器
let app = express();
// 1.安装cookie-parser模块之后,引入该模块
let cookieParser = require('cookie-parser');
// 2.设置中间件, 传入回调函数作为参数
// 设置signed属性为true后,需要cookieParser()添加字符串形式的加密参数
// 报错信息:cookieParser("secret") required for signed cookies
app.use( cookieParser('123456') );
// 搭建路由
app.get( '/', ( req, res )=>{
// 打印cookies缓存信息
// 因为设置了标记加密的属性signed: true,因此访问cookie需要这样req.signedCookies
if( req.signedCookies ){
console.log( req.signedCookies );
}
if( req.cookies ){
console.log( req.cookies );
}
res.send( '这是首页' );
} )
app.get( '/news', ( req, res )=>{
res.send( '这是新闻页面' );
} )
app.get( '/setnews', ( req, res )=>{
// 3.配置cookie缓存信息
// 常用参数:
// name-cookie的名称,必需
// value-cookie的值,必需
// maxage: 最大的cookie失效时间
// secure: 为true时,cookie在http中无效,https中有效
// Path: 表示cookie影响的路径,如果不匹配路径,则游览器无法发送cookie信息
// httpOnly: 如果为true,则无法通过程序(js脚本,applet等)读取到cookie信息,防止了XSS攻击产生
// signed: 标记加密,设置为true,表示对cookie进行签名,这样只能用res.signedCookies访问,而不能用res.cookies访问。且被篡改的签名cookie会被服务器拒绝,并且重置
// domain: 设置的代理域名
// res.cookie( name, value, {maxAge: 900000, [...]} );
// 如果是在同一域名下,那么cookie会被缓存记录下来; 跨域请求则不会缓存cookie信息
// 即cookie缓存遵循同源策略:同协议,同域名,同端口,其中有一个或以上不同则为跨域
// 如果需要不同的域名共享cookie,可以通过设置domain参数,设置需要共享的域名
res.cookie( 'user', 'linx', {maxAge:600000, secure: false, signed: true} );
res.send( '这是新闻配置页面' );
} )
// 监听端口
app.listen( 8000, '127.0.0.1' );
- 按照上面代码的三个步骤去简单使用cookie就明白,cookie是在进入到某一路由下才进行的一系列的配置,除了重要的name和value的基本配置,其余根据需要选择属性添加即可。
- 需要注意的是signed标记之后,需要添加加密方式,之后会对value值进行加密操作。以及跨域的情况下,cookie是不会共享的,除非进行domain的域名配置,如果是在本地服务器,可以修改本地host文本文件,在其中放行你设置的域名,使其可以对cookie进行共享,即可观察到跨域仍能共享cookie的现象。
- 当你设置好了cookie后,可以在游览器开发者工具中按照如下步骤进行查看cookie的配置。