PHP cookie SESSION 的一些操作方法及自己的理解
会话技术COOKIE
COOKIE的基本使用
COOKIE原理
技术:服务器将数据通过HTTP响应存储到浏览器上,浏览器可以在以后携带对应COOKIE数据访问服务器
利用$_COOKIE访问cookie信息
设置COOKIE信息
setcookie函数来设定COOKIE信息
cookie名的设置:字符串,第一个参数
cookie值的设置:第二个参数
cookie值的类型要求:必须是简单类型中的整数和字符串
COOKIE(会话要求)能够实现跨脚本共享数据
setcookie('age',18); setcookie('name','mark'); var_dump($_COOKIE);
COOKIE生命周期:COOKIE在浏览器生存时间(浏览器在下次访问服务器的时候是否携带对应的COOKIE)
默认(不设定)时的生命周期:不设定周期默认是关闭浏览器(会话结束)
设定为一个常规日期戳的周期:通过setcookie第三个参数可以限定生命周期,是用时间戳来管理,从格林威治时间开始
设定为0的周期:第三个参数设定为0,表示普通设置,会话结束过期
删除一个cookie的做法:服务器没有权限去操作浏览器上的内容(不可能删除),可以通过设定生命周期让浏览器自动判定COOKIE是否有效:无效清除
setcookie('age',18);//普通COKKIE,浏览器关闭失效 setcookie('a2',19,0);//和普通COKKIE一样 setcookie('name','mark',7*24*60*60);//格林威治时间七天过期 setcookie('ll','ddd',time()+7*24*60*60);//格林威治时间,从现在开始7天过期 var_dump($_COOKIE); //删除COOKIE setcookie('a2','');
COOKIE作用范围
默认(不设定)的范围:就是使用COOKIE默认的作用范围
设定为‘/’的含义:告知浏览器当前COOKIE的作用范围是网站根目录
setcookie(名字,值,生命周期,作用范围)
//设定全局访问的COOKIE setcookie('global_son','global_son',0,'/');
不同文件层级中,设定的COOKIE默认是在不同的文件中有访问限制,上层文件中设定的COOKIE可以在下层(子文件)中访问,而子文件中设定的COOKIE不能在上层文件中访问
跨子域
setcookie(名字,值,生命周期,作用范围,有效域名)
设定COOKIE的有效域名:不同的域名(包含主机)之间不能共享COOKIE,可以通过secookie的第五个参数来控制
跨子域名的设定方法:在设定域名访问的时候用设定上级域名即可类似于ezuhuishou.com,不需要设置前缀
setcookie('global_son','global_son',0,'/','xxx.com');
COOKIE数组数据
COOKIE本身只支持简单数据,能够保留数据本身有限,也不成体系。如果需要使用COOKIE来保留一组数组。(COOKIE不支持数组)
setcookie('good_ids[0]',1); setcookie('good_ids[1]',2); setcookie('good_ids[2]',3); setcookie('good_ids[3]',4); setcookie('good_ids[4]',5);
会话技术SESSION
SESSION原理
session与浏览器无关,但是与COOKIE有关
不存在该文件:创建一个sessionID命名文件
存在该文件:读取文件内容(反序列化),将数据存储到$_SESSION中
如果COOKIE中存在,使用现成的
如果COOKIE中不存在,则创建一个sessionID,并通过响应头以cookie形式保存到浏览器上
PHP碰到session_start()时开启session会话,会自动检测sessionID
初始化超全局变量$_SESSION为一个空数组
PHP通过sessionID去指定位置(SESSION文件存储位置)匹配对应的文件
脚本执行结束,将$_SESSION中保存的所有数据序列化存储到sessionID对应的文件中
SESSION基本使用
启用session,任何时候都需要开启session(脚本使用到$_SESSION就开启一次)
设置SESSION信息:如果想存储数据到SESSION中,那么只要不断给$_SESSION数组中添加元素即可
//SESSION基本使用 session_start(); $_SESSION['name']='mark'; $_SESSION['age']=20; echo $_SESSION['name'];
删除SESSION:就是将session数据清理掉
删除一个SESSION信息
session_start(); $_SESSION['name']='mark'; $_SESSION['age']=20; //删除数据 unset($_SESSION['name']); var_dump($_SESSION);
删除全部SESSION数据
$_SESSION=array();
SESSION配置
session.name:session名字,保存在COOKIE中sessionID对应的名字
session.autostart :是否自动开启session(无需手动sessionstart()),默认是关闭
session.save_handler:session数据保存方式
session.save_path:session默认保存的位置
SESSION常用配置
session.cookie_lifetime:phpsessionID在浏览器端对应COOKIE的生命周期,默认是会话结束
session.cookie_path:sessionID在浏览器存储之后允许服务器访问的路径(COOKIE有作用范围)
session.cookie_domain:COOKIE允许访问的子区域
配置的两种方式
php.ini:全局配置,修改php.ini中的配置项
脚本中配置:PHP可以通过ini_set函数来在运行中设定某些配置项(只会对当前运行的脚本有效),把这种配置称之为项目级
ini_set('session.save_path','e:/server/文件名字')
销毁SESSION
是指删除SEESION对应的SESSION文件
系统提供一个函数:sessiondestroy(),会自动根据sessionstart得到的sessionID去找到指定的session文件,并把其删除
//销毁SESSION session_destroy();
SESSION垃圾回收机制
session.gc_maxlifetime =1440:规定session文件最大生命周期是1440秒,24分钟
session.gc_probability =1:垃圾回收概率因子(分子)
session.gc_divisor = 1000:垃圾回收概率分母,默认触发概率是1/1000
扫一扫,关注我们