核心编程笔记 cookie session

会话技术

由于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的本质就是文本文件
==图片1==

(2). cookie的有效时间

setcookie(name,value,expire);

expire是用于设置cookie的过期时间,时间是以秒记录的,有效期的起点是时间原点

如果省略表示会话cookie,有效期到浏览器关闭。

==图片3==

(3). cookie的路径

首先明确:PHP有自己位于服务器上的路径

cookie也有自己的路径

默认如果在设置cookie时没有设置参数,那么cookie的路径默认就是PHP文件的路径


setcookie(name,value,expire,path);

path  也有设置cookie在浏览器显示的路径

如果客户端的cookie显示路径是所请求的PHP文件路径的父路径则会携带过去,但是绝大多数情况我们是将一个cookie设置为整站有效
==图片4==

(4). cookie的域

理解域名: 说明
顶级域名 主要是标示国家
- .cn  .us  .jp
一级域名 主要是标识行业
.com 商业机构
.gov 政府机构
.org 非盈利组织
.edu 教育机构
.net 网络机构
.mil 军事机构
二级域名 主要用于标识公司
baidu qq 163

cookie所实现的跨域,只能是二级域名相同
==图片5==

(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的技术,提交的数据
==图片2==

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原理

==图片6==

3.开启session

session_start();
用于开启session机制。同时激活$_SESSION预定义变量

4.session操作——设置session

session的操作就是向SESSION<br>_SESSION这个变量中写数据,或读数据<br> 当向内存中的_SESSION变量中写数据时,$_SESSION变量中数据最终会保存到硬盘的一个文本文件中

5.session操作——读取session

当我们从$_SESSION变量中读取数据时,其实就是将硬盘那个session文件中的数据提取到内存中
==图片7==

**理解:SESSIONsession<BR><BR>cookie<BR>PHP_SESSION与session文件之间交互的过程**<BR> 首次:<BR> 请求时,服务器首先在硬盘中创建一个唯一的文件,将文件名以cookie的形式返回客户端<BR> 在PHP脚本执行结束时,将_SESSION内存变量中的数据写入到session文件中

其后各次:

请求时,服务器会收到客户端的cookie中保存的session文件名,同时会在硬盘中找到对应的session文件。

然后打开这个session文件,将文件中的数据读取到$_SESSION变量

6.session操作——获取session ID

session_id();

用于获取当前session id值

7.session数据

session可以存储任何类型的数据,但是$_SESSION变量本身的下标必须是字符串
==图片8==

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数据的介质,是文件还是数据库(一般用文件)

==图片9==

(2).用于设置包岑sessionid的那个cookie的有效期

==图片10==

(3).设置cookie位于浏览器端的显示路径

==图片11==

(4).设置保存sessionid的那个cookie的域

==图片12==

(5).设置保存sessionid的那个cookie是否允许PHP文件访问

==图片13==

(6).设置保存sessionid的那个cookie是否只允许https协议传递

==图片14==

(7).设置session文件的保存位置

==图片15==

(8).设置保存sessionid的那个cookie的名

==图片16==

(9).设置是否使用cookie保存sessionid

==图片17==

(10).设置是否使用cookie保存sessionid

==图片18==

(11).自动开启session

==图片24==
设置为自动后,就不用写入session_start();

10.session文件分目录存储

当项目很大时,会产生数量非常多的session文件,为了能够加快session文件的查询速度,我们可以采用分目录存储session文件
==图片19==
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分钟)设置如下图:
==图片20==
垃圾:PHP会认为过期的session是一个垃圾文件,所以需要删除,删除这样的过期session文件有一个机制,就是session垃圾回收机制
==图片21==

12.cookie是浏览器的一个功能,可以被禁止,若被禁止,如何实现session?

(1).设置不仅仅使用cookie保存session

==图片22==

(2).设置可以使用transid保存session数据

==图片23==

(3).设置完后形成过程

PHP在启动的过程中会检测到session.use_strans_sid=1,当客户端请求了某个PHP文件是,session机制会自动查找当前PHP文件中是否有a链接,如果有就在url后加?PHPSESSION=当前的sessionid值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章