会话技术
由于HTTP协议是无连接无状态的,所以HTTP协议无法记住客户端的信息,为了弥补HTTP协议这两点的“不足”,所以出现了会话技术
cookie技术
1.什么是cookie
服务器端,将能够唯一标示用户的数据保存客户端的一种方式。之后浏览器在每次请求时都会自动携带给服务器
2.cookie的工作原理
3.设置cookie
(1). 设置cookie
setcookie(name,value,expire,path,domain,httponly,secure)
参数 | 说明 |
---|---|
name | cookie名 |
value | cookie值 |
expire | 过期时间,以秒为单位,以时间原点为起点(1970年1月1日) |
path | cookie在浏览器端显示的路径 |
domain | 域 |
secure | true或false |
httponly | true或false |
位于客户端的cookie的本质就是文本文件
(2). cookie的有效时间
setcookie(name,value,expire);
expire是用于设置cookie的过期时间,时间是以秒记录的,有效期的起点是时间原点
如果省略表示会话cookie,有效期到浏览器关闭。
(3). cookie的路径
首先明确:PHP有自己位于服务器上的路径
cookie也有自己的路径
默认如果在设置cookie时没有设置参数,那么cookie的路径默认就是PHP文件的路径
setcookie(name,value,expire,path);
path 也有设置cookie在浏览器显示的路径
如果客户端的cookie显示路径是所请求的PHP文件路径的父路径则会携带过去,但是绝大多数情况我们是将一个cookie设置为整站有效
(4). cookie的域
理解域名: | 说明 |
---|---|
顶级域名 | 主要是标示国家 |
- | .cn .us .jp |
一级域名 | 主要是标识行业 |
.com | 商业机构 |
.gov | 政府机构 |
.org | 非盈利组织 |
.edu | 教育机构 |
.net | 网络机构 |
.mil | 军事机构 |
二级域名 | 主要用于标识公司 |
– | baidu qq 163 |
cookie所实现的跨域,只能是二级域名相同
(5). secure
setcookie(name,value,expire,path,domain,secure);
secure取值为true或false
如果设置为true,那么只要当客户端使用的协议是HTTPS时,才会会将cookie携带给服务器端。
https(更安全)=http+ssl
(6). httponly
setcookie(name,value,expire,path,domain,secure,httponly);
httponly取值为true或false
如果设置为true,那么只能由PHP访问cookie,js不能访问
4.读取cookie
$_COOKIE 就是一个关联数组,主要是用于存储用户端通过cookie的技术,提交的数据
5.删除cookie
方法1:再设置一次cookie,有效期设置为过期时间
setcookie('name','air jordan',time()-1);
方法2:将cookie的值设置为字符空
setcookie('name','');
6.关于cookie值的类型
由于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技术
1.什么是session技术
session也是会话技术中的一种,session是以cookie为基础,将重要的数据保存在服务器端,同时将能够唯一标识这份数据的数据以cookie保存客户端
2.session原理
3.开启session
session_start();
用于开启session机制。同时激活$_SESSION预定义变量
4.session操作——设置session
session的操作就是向_SESSION变量中写数据时,$_SESSION变量中数据最终会保存到硬盘的一个文本文件中
5.session操作——读取session
当我们从$_SESSION变量中读取数据时,其实就是将硬盘那个session文件中的数据提取到内存中
**理解:_SESSION内存变量中的数据写入到session文件中
其后各次:
请求时,服务器会收到客户端的cookie中保存的session文件名,同时会在硬盘中找到对应的session文件。
然后打开这个session文件,将文件中的数据读取到$_SESSION变量
6.session操作——获取session ID
session_id();
用于获取当前session id值
7.session数据
session可以存储任何类型的数据,但是$_SESSION变量本身的下标必须是字符串
8.销毁session
函数 | 说明 |
---|---|
session_destroy(); | 销毁session文件 |
unset($_SESSION[下标]); | 销毁session中部分文件 |
session_start();
$userinfo=['id'=>34,'u_name'=>'admin','u_pwd'=>'123'];
$_SESSION['id']=$userinfo['id'];
$_SESSION['u_name']=$userinfo['u_name'];
$_SESSION['u_pwd']=$userinfo['u_pwd'];
unset($_SESSION['u_name']);
echo '<pre>';
print_r($_SESSION);
9.session配置(在文件php.ini中)
(1).用于设置保存session数据的介质,是文件还是数据库(一般用文件)
(2).用于设置包岑sessionid的那个cookie的有效期
(3).设置cookie位于浏览器端的显示路径
(4).设置保存sessionid的那个cookie的域
(5).设置保存sessionid的那个cookie是否允许PHP文件访问
(6).设置保存sessionid的那个cookie是否只允许https协议传递
(7).设置session文件的保存位置
(8).设置保存sessionid的那个cookie的名
(9).设置是否使用cookie保存sessionid
(10).设置是否仅使用cookie保存sessionid
(11).自动开启session
设置为自动后,就不用写入session_start();
10.session文件分目录存储
当项目很大时,会产生数量非常多的session文件,为了能够加快session文件的查询速度,我们可以采用分目录存储session文件
1;e:/tmp 表示在e:/tmp目录下需要创建a-z,0-9位文件夹名的文件夹36个。
2;e:/tmp 表示在e:/tmp目录下需要创建a-z,0-9位文件夹名的文件夹36个,然后在个文件夹再创建36个文件夹。
11.session垃圾回收机制
session文件可以设置一个有效期。默认(24分钟)设置如下图:
垃圾:PHP会认为过期的session是一个垃圾文件,所以需要删除,删除这样的过期session文件有一个机制,就是session垃圾回收机制
12.cookie是浏览器的一个功能,可以被禁止,若被禁止,如何实现session?
(1).设置不仅仅使用cookie保存session
(2).设置可以使用transid保存session数据
(3).设置完后形成过程
PHP在启动的过程中会检测到session.use_strans_sid=1,当客户端请求了某个PHP文件是,session机制会自动查找当前PHP文件中是否有a链接,如果有就在url后加?PHPSESSION=当前的sessionid值。