cookie 是浏览器端存储数据的技术. 服务器不能存储 cookie, 但是服务器可以发送请求命令浏览器存储 cookie.
如何存储 cookie
在 document 中有一个属性 叫 cookie
cookie 是一个 键值对, 是一个使用 等号 连接的键值, 是一个字符串
cookie 直接使用 赋值来追加数据
多个 cookie 的数据使用 分号空格 连接, 并且他也是一个字符串
cookie 的存储特点
1> cookie 默认是生命周期是浏览器关闭以前
2> cookie 在多个页面中可以共享数据
3> cookie 可以伴随 http 请求传递数据
4> cookie 在存储非 ascii 码的时候要使用指定方法来转换
escape, unescape
encodeURI, decodeURI
encodeURIComponent, decodeURIComponent
5> cookie 的存储可以设置生命周期
给每一个 cookie 值添加一个属性 expires, 其取值为一个 时间类型的字符串
今天基本上使用 max-age 来代替 expires 属性, max-age 取值是秒数
6> cookie 的访问级别( path )
使用 path 属性可以配置 cookie 的访问级别, 即哪一个文件夹下的文件可以访问该 cookie
默认是 ./
如果希望上一级目录可以访问, 就给 path 赋值上一级目录的目录名
如果希望整个网站都可以访问, 那么使用 path=/ 即可
7> cookie 不能够跨域, 但是可以是设定同域的访问级别( domain )
8> cookie 还有一个特性 secure
cookie 会伴随着 http 请求发送.
secure 如果设置为 true 表示只有在 https 请求的时候发送
9> 一般如果希望不使用 cookie 来存储数据( 会随着 HTTP 请求提交 )
可以使用隐藏域: <input type="hidden" >
html5 开始引入了其他的存储数据的办法: 本地存储( localStorage )
如何读取 cookie 中的数据
读取的时候会将所有的数据都一并取出来, 但是并非全部数据我都需要, 因此这里需要对数据进行解析
cookie 数据格式: '键=值; 键=值; 键=值'
获得数据的时候理论上是利用键名取对应 的值
字典结构( 键值对结构 )
将 cookie 字符串转换成 一个 对象的算法
function getCookie() {
var cookies = document.cookie.split( ';' ).map(function ( v ) { return v.trim(); });
var cookie = {};
cookies.forEach( function ( v ) {
var kv = v.split( '=' );
cookie[ kv[ 0 ] ] = kv[ 1 ];
});
return cookie;
}
在服务器端如何操作 cookie 和 session
$_COOKIE
$_SESSION
cookie 是浏览器端的操作, 所以服务器 不 可以操作 cookie.
在服务器端允许向 浏览器发送一个 set-cookie 的响应