COOKIE 和 SESSION
会话技术
会话:浏览器与服务器之间的数据交流。
会话的目的:在同一台浏览器对服务器的多次请求中,通过数据持久化存储技术,以实现连续的业务逻辑
HTTP协议特点:
无状态、无记忆的 多次请求之间,无任何的联系
即同一用户请求同一网站的不同页面,服务器无法识别是否是同一用户发起的请求。因此,用户无法进行连续的业务逻辑。
如:登录,在A页面登录,请求B页面,提示登录。
学生进教学楼: 每次开证明,证明是传智学生 or 带着胸牌
门卫(没有记忆) 进校门,只有传智的学生可以进入:
按照数据持久化的位置进行区分
- cookie:在浏览器端持久化数据的容器
- session在服务器端持久化数据的容器
cookie
-
在浏览器端持久化数据的容器
-
可以使用js对cookie进行操作
-
cookie 允许服务器脚本(PHP脚本)在浏览器端存储数据
-
cookie特点:在cookie中数据设置后,浏览器再次请求服务器指定页面时,会自动携带cookie中的数据到服务器,在服务器中可以获取cookie中的数据;
浏览器查看cookie数据
js操作cookie(了解)
// 设置cookie
document.cookie = 'name=zs';
document.cookie = 'pwd=123';
// 获取cookie中的值
var cookies = document.cookie;
var arr = cookies.split('; '); //注意这里是 '; ' 有空格的
if(arr){
for (var i = 0; i < arr.length; i++) {
var data = arr[i].split('=');
if(data[0] == 'name'){
console.log(data[1]);
}
}
}
jquery.cookie.js插件 操作cookie
//向页面中引入插件js文件,基于jquery的
$.cookie('weight',100,{expires:7});//设置 expires 过期时间
$.cookie('name');//获取
$.cookie('name',null);//删除
$.cookie(键,值,{expires:过期天数})
$.cookie(键) //获取
PHP操作cookie(服务器端操作cookie)
//设置cookie
setcookie('名称','值');
setcookie('名称','值','有效期');
//删除cookie 将过期时间设置为之前的时间即可
setcookie('名称','',time()-1000);
//获取cookie
//$_COOKIE是PHP的超全局变量,内部存放有浏览器传过来的cookie数据,$_COOKIE只能用于获取数据
$_COOKIE['名称'];
注意点:
- cookie中的数据 可以被同一个网站的页面所共享
- 不同浏览器的cookie 不能共享
- cookie的数据存储在浏览器中,每次请求服务器,在请求报文中携带cookie的数据,发送给服务器
- 服务器无法直接操作cookie,通过在服务器端设置响应头的的方式,通知浏览器对cookie进行设置,
- cookie中的数据有效期,不设置即浏览器关闭,会话结束,数据销毁
- cookie存储容量小,约4kb
session
- 在服务器端存储数据的容器
- session容器是一个数组的形式,通过超全局变量$_SESSION 进行取值和设置
- session在使用前,必须先开启session机制
- session中的数据可以被当前网站所共享
session的基本操作
开启sessiion机制(使用session前必须调用此方法)
session_start(); //开启session会话或者重用已经创建的会话。
session_start();的作用:
-
在服务器中随机生成一个sessionID
-
创建一个session会话文件,用于存储数据(文件名和session的相同,同一个会话只会创建一次)
-
在响应头中设置cookie,在cookie中存放本次会话的sessionID
设置和获取session中的数据(通过超全局变量$_SESSION进行操作)
//设置
$_SESSION['键']='值';
//删除
unset($_SESSION['键']);
//清空session
$_SESSION=[];
//直接删除session会话文件,PHP脚本将无法读取session数据
session_destroy()
//获取session的id
session_id();
COOKE 和SESSION的应用--登录状态保持
登录模块的基本思路:
-
如果用户登录成功,在服务器中记录用户的登录状态
-
执行session_start(), 生产session文件,在session文件中,记录当前用户的信息
-
通过响应头部,给浏览器的cookie设置sessionID
if($name=='zs'&&$pwd=='666'){ //登录成功 session_start(); $_SESSION['username']=$name; }
-
-
后续访问其他页面(购物车,个人中心),浏览器会自动发送cookie中存放的sessionID到服务器
-
服务器会浏览器传递根据sessionID,找到对应的session文件,查看其中是否存放有当前用户的信息
-
是: 用户已登录 ,正常浏览
-
否:用户未登录,跳转到登录页
session_start(); if(!empty($_SESSION['username'])){ //正常浏览 }else{ header('location:./04-login.html'); die();//后面代码不执行 }
流程图如下:
-