由于HTTP协议是无连接无状态的,所以HTTP协议无法记住客户端的信息,为了弥补HTTP协议这两点的“不足”,所以出现了会话技术
服务器端,将能够唯一标示用户的数据保存客户端的一种方式。之后浏览器在每次请求时都会自动携带给服务器
setcookie(name,value,expire,path,domain,httponly,secure)
参数说明namecookie名valuecookie值expire过期时间,以秒为单位,以时间原点为起点(1970年1月1日)pathcookie在浏览器端显示的路径domain域securetrue或falsehttponlytrue或false位于客户端的cookie的本质就是文本文件
setcookie(name,value,expire); expire是用于设置cookie的过期时间,时间是以秒记录的,有效期的起点是时间原点 如果省略表示会话cookie,有效期到浏览器关闭。
首先明确:PHP有自己位于服务器上的路径 cookie也有自己的路径 默认如果在设置cookie时没有设置参数,那么cookie的路径默认就是PHP文件的路径 setcookie(name,value,expire,path); path 也有设置cookie在浏览器显示的路径 如果客户端的cookie显示路径是所请求的PHP文件路径的父路径则会携带过去,但是绝大多数情况我们是将一个cookie设置为整站有效
cookie所实现的跨域,只能是二级域名相同
setcookie(name,value,expire,path,domain,secure); secure取值为true或false 如果设置为true,那么只要当客户端使用的协议是HTTPS时,才会会将cookie携带给服务器端。 https(更安全)=http+ssl
setcookie(name,value,expire,path,domain,secure,httponly); httponly取值为true或false 如果设置为true,那么只能由PHP访问cookie,js不能访问
$_COOKIE 就是一个关联数组,主要是用于存储用户端通过cookie的技术,提交的数据
方法1:再设置一次cookie,有效期设置为过期时间
setcookie('name','air jordan',time()-1);方法2:将cookie的值设置为字符空
setcookie('name','');由于cookie的值最终是保存在客户端的文本文件中,由于文本文件中只能存储字符,所以cookie不能存储数组。 如果想存储数组,可以使用变通的方式
$arr=['PG'=>'irving','SG'=>'T-mac','SF'=>'Lebron','PF'=>'Yi','C'=>'Yao']; setcookie('PG',$arr['PG']); setcookie('SG',$arr['SG']); setcookie('SF',$arr['SF']); setcookie('PF',$arr['PF']); setcookie('C',$arr['C']); echo '<pre>'; print_r($_COOKIE);session也是会话技术中的一种,session是以cookie为基础,将重要的数据保存在服务器端,同时将能够唯一标识这份数据的数据以cookie保存客户端
session_start(); 用于开启session机制。同时激活$_SESSION预定义变量
session的操作就是向 S E S S I O N 这 个 变 量 中 写 数 据 , 或 读 数 据 < b r > 当 向 内 存 中 的 _SESSION这个变量中写数据,或读数据<br> 当向内存中的 SESSION这个变量中写数据,或读数据<br>当向内存中的_SESSION变量中写数据时,$_SESSION变量中数据最终会保存到硬盘的一个文本文件中
当我们从$_SESSION变量中读取数据时,其实就是将硬盘那个session文件中的数据提取到内存中
**理解: S E S S I O N 与 s e s s i o n 文 件 之 间 交 互 的 过 程 ∗ ∗ < B R > 首 次 : < B R > 请 求 时 , 服 务 器 首 先 在 硬 盘 中 创 建 一 个 唯 一 的 文 件 , 将 文 件 名 以 c o o k i e 的 形 式 返 回 客 户 端 < B R > 在 P H P 脚 本 执 行 结 束 时 , 将 _SESSION与session文件之间交互的过程**<BR> 首次:<BR> 请求时,服务器首先在硬盘中创建一个唯一的文件,将文件名以cookie的形式返回客户端<BR> 在PHP脚本执行结束时,将 SESSION与session文件之间交互的过程∗∗<BR>首次:<BR>请求时,服务器首先在硬盘中创建一个唯一的文件,将文件名以cookie的形式返回客户端<BR>在PHP脚本执行结束时,将_SESSION内存变量中的数据写入到session文件中 其后各次: 请求时,服务器会收到客户端的cookie中保存的session文件名,同时会在硬盘中找到对应的session文件。 然后打开这个session文件,将文件中的数据读取到$_SESSION变量
session_id(); 用于获取当前session id值
session可以存储任何类型的数据,但是$_SESSION变量本身的下标必须是字符串
设置为自动后,就不用写入session_start();
当项目很大时,会产生数量非常多的session文件,为了能够加快session文件的查询速度,我们可以采用分目录存储session文件 1;e:/tmp 表示在e:/tmp目录下需要创建a-z,0-9位文件夹名的文件夹36个。 2;e:/tmp 表示在e:/tmp目录下需要创建a-z,0-9位文件夹名的文件夹36个,然后在个文件夹再创建36个文件夹。
session文件可以设置一个有效期。默认(24分钟)设置如下图: 垃圾:PHP会认为过期的session是一个垃圾文件,所以需要删除,删除这样的过期session文件有一个机制,就是session垃圾回收机制
PHP在启动的过程中会检测到session.use_strans_sid=1,当客户端请求了某个PHP文件是,session机制会自动查找当前PHP文件中是否有a链接,如果有就在url后加?PHPSESSION=当前的sessionid值。