会话技术
- http无状态概述
- 状态保持方式概述
cookie
cookie原理分析
- 一个cookie的设置以及发送过程分为以下四步
- 客户端发送一个http请求到服务器端
- 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
- 客户端发送一个http请求到服务器端,其中包含Cookie头部
- 服务器端发送一个http响应到客户端
语法:
setcookie(name[, value, expire, path, domain]);
cookie常用属性
expires 有效期
- 临时COOKIE(缓存cookie)
setcookie("uName","admin");
- 硬盘COOKIE
//一小时过期 setcookie("uName","admin",time()+ 3600) //永久性COOKIE setcookie("password","123",PHP_INT_MAX);
path有效 路径
//只有在upload文件夹下才能被访问到 setcookie("uName","admin",time()+ 3600,"/upload")
domain 域名
- 域名:
- 顶级:baidu.com
- 二级域名
- www.baidu.com
- music.baidu.com
- api.music.baidu.com
- image.baidu.com
//只有在a.com以及它下面的子域名中才能被访问 setcookie("uName","admin",time()+ 3600,"/","a.com")
删除cookie
设置有效时间为过去时间
setcookie("uName","admin",time()-1);
将cookie中的值设置为false或者空字符串
setcookie("uName",false); //或者 setcookie("uName","");
不设置值
setcookie("uName");
在浏览器中清除缓存
服务器操作cookie
// 设置cookie
//
// 设置1小时后过期
setcookie("user", "lisi", time()+3600);
// 获取单个cookie
echo $_COOKIE["user"];
// 查看所有cookie
print_r($_COOKIE);
js对cookie基本操作
// 设置cookie
function setCookie(key,value,param){
document.cookie = key + '=' + value + '; expires=' + param.expires + '; path=' + param.path;
}
// 获取cookie
function getCookie(key){
var cookies = document.cookie;
var arr = cookies.split('; ');
if(arr){
for (var i = 0; i < arr.length; i++) {
var kv = arr[i].split('=');
if(kv[0] == key){
return kv[1];
}
}
}
}
cookie的缺点:
- COOKIE数据不太安全;
- COOKIE存储的数据类型,只能是字符串;
- COOKIE文件是有容量限制(大约4KB)。4*1024b–> 1个文字大概是2~3b
session
session的优点:
- SESSION也是一种会话技术;
- SESSION数据存在服务器端,相对于比较安全;
- SESSION技术是基于COOKIE的,没有COOKIE也就没有SESSION了。
- 服务器将SESSION数据保存在服务器上,而将SESSION的用户id存储在客户端电脑上。
- SESSION存储的数据类型,除了资源外的数据类型都可以;
- SESSION文件没有大小限制;
session原理分析
- 客户端第一次请求服务器时,服务器开启一个session,生成一个唯一标识(sessionid:存储的数据与此sessionid关联),并以响应头的Set-Cookie属性响应到客户端
- 客户端的后续请求会一直通过请求头的Cookie属性携带sessionid(客户端与服务器通过此id维持状态)
session基本操作
- 设置session
session_start();
$_SESSION['user'] = array('username'=>'lisi','age'=>'12');
- 读取session
session_start();
$user = $_SESSION['user'];
- 删除一个session信息
session_start();
unset($_SESSION['user']);
- 删除所有session信息
session_start();
unset($_SESSION);
- 销毁session
session_destroy();
session与cookie的关系
- session可以借助cookie实现状态维持,也可以不依赖cookie(URL重写)
区别 | cookie | session |
---|---|---|
存储位置 | 浏览器 | 服务器 |
浏览器携带的数据量 | 多 | 少(只携带session-id) |
存储的数据类型 | 只能是字符串 | 任意类型 |
安全性 | 较低 | 较高 |
默认的有效路径 | 当前路径及其子路径 | 整站有效 |
数据的传输量 | 有限制4K,不能超过20个 | 无限制 |
session的回收时间:
- session.gc_maxlifetime
session.gc_maxlifetime = 1440