Cookie和Session的差异及使用
Cookie 和 Session 的机制差异
- Cookie 保存在客户端, 是一种在客户端保持状态的方案和贮存用户端会话的一种机制, 需要客户端开启Cookie支持
- Session 保存在服务端, 是客户端与服务端保持状态的一种解决方案,因为服务端保持状态需要保存一个客户端的状态Sesssion id,所以Session在一定程度上会依赖Cookie,但也可以通过其他方式传递Session id,例如post / get / webStorage(localStorage / sessionStorage,需结合JS和JSON来读写) 方式等, 很明显在安全性上 session 是比 cookie 高的
- Cookie 在客户端最大存储为4K,而Session在服务端默认是以文件的形式存储的,还可以存放在数据库和内存中
- Cookie 和 Session 都可以设置生命周期,但是sesson在访客关闭浏览器后且在session周期内不使用session id找回的情况下会失效
Cookie | Session | |
---|---|---|
保存位置 | 客户端 | 服务端 |
储存大小 | 小型文本文件(4k) | 文件/内存/数据库 |
存储形式 | 一系列的键值对 | 散列哈希值 |
Cookie 及 Sesson 用途
- Cookie 可用于临时记录用户访问的页面记录
- Cookie 可用于JavaScript访问及读写
- Cookie 保存用户的一些基本嘻嘻
- Session 用户后端的安全性验证
- Session 多用户后端操作的读写
- Session 解决表单的重复提交问题
设置Cookie 和 Session
JavaScript 对 Cookie 的读写
// 设置Cookie
function setCookie(name, value, expireday) {
var exp = new Date();
exp.setTime(exp.getTime() + expireday*24*60*60*1000); //设置cookie的期限
document.cookie = name+"="+escape(value)+"; expires"+"="+exp.toGMTString();//创建cookie
}
// 读取Cookie
function getCookie(name) {
var cookieStr = document.cookie;
var cookieArr = cookieStr.match(new RegExp(name+"=[a-zA-Z0-9]*;$"));
var cookieVal = cookieArr.split("=");
if(cookieVal[0] == name) {
return unescape(cookieVal[1]);
}
}
// 删除Cookie
function clearCookie(name) {
setCookie(name, "", -1); // 调用 设置Cookie 函数 setCookie
}
PHP 操作 Cookie 和 Session
// PHP 设置Cookie
setcookie("name", "san", time()+3600);
// 读取Cookie
echo $_COOKIE["name"];
// 删除Cookie
setcookie("name", "", time()-3600);
// 启动Session会话
session_start();
// 设置Session
$_SESSION['name'] = 'san';
// 删除Session
unset($_SESSION['name']);
// 销毁Session
session_destroy();
注: PHP 的各种框架都会有封装读取和设置 Cookie 及 Session
参考文章
- Cookie/Session的机制与安全
- HTTP协议是无状态的,即每次用户请求到达服务器时,HTTP服务器并不知道这个用户是谁、是否登录过等
- Cookie 实现机制
- Cookie 是由客户端保存的小型文本文件,其内容为一系列的键值对
- Cookie 是由HTTP服务器设置的,保存在浏览器中,在用户访问其他页面时,会在HTTP请求中附上该服务器之前设置的Cookie
- Cookie 传递流程:
- 浏览器向某个URL发起HTTP请求(可以是任何请求,比如GET一个页面、POST一个登录表单等)
- 对应的服务器收到该HTTP请求,并计算应当返回给浏览器的HTTP响应。
- 在响应头加入Set-Cookie字段,它的值是要设置的Cookie。
- 浏览器收到来自服务器的HTTP响应。
- 浏览器在响应头中发现Set-Cookie字段,就会将该字段的值保存在内存或者硬盘中。
- 浏览器下次给该服务器发送HTTP请求时, 会将服务器设置的Cookie附加在HTTP请求的头字段Cookie中。
- 服务器收到这个HTTP请求,发现请求头中有Cookie字段, 便知道之前就和这个用户打过交道了。
- 过期的Cookie会被浏览器删除。
- Cookie 的安全隐患: 客户端伪装HTTP请求带Cookie
- Cookie 防篡改机制: 添加签名 secret
- Session 实现机制
- 将Session id保存到Cookie中返回给浏览器
- 浏览器下次请求带Session id请求进行校验
- COOKIE和SESSION有什么区别?
- Cookie/Session机制详解
- cookie与session的区别
- 老生常谈session,cookie的区别,安全性
- 深入理解 Session 与 Cookie
- HTTP Session 攻擊與防護
- cookie 和 session
- 介紹 Session 及 Cookie 兩者的差別說明
- Session和Cookie的区别及Session的生命周期
- session和cookie的区别和联系
- JavaScript如何读写cookie
- JS设置cookie,删除cookie
- PHP Cookies