核心编程笔记 cookie session

mac2024-09-27  52

会话技术

由于HTTP协议是无连接无状态的,所以HTTP协议无法记住客户端的信息,为了弥补HTTP协议这两点的“不足”,所以出现了会话技术

cookie技术

1.什么是cookie

服务器端,将能够唯一标示用户的数据保存客户端的一种方式。之后浏览器在每次请求时都会自动携带给服务器

2.cookie的工作原理

3.设置cookie

(1). 设置cookie

setcookie(name,value,expire,path,domain,httponly,secure)

参数说明namecookie名valuecookie值expire过期时间,以秒为单位,以时间原点为起点(1970年1月1日)pathcookie在浏览器端显示的路径domain域securetrue或falsehttponlytrue或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的操作就是向 S E S S I O N 这 个 变 量 中 写 数 据 , 或 读 数 据 < b r > 当 向 内 存 中 的 _SESSION这个变量中写数据,或读数据<br> 当向内存中的 SESSION<br>_SESSION变量中写数据时,$_SESSION变量中数据最终会保存到硬盘的一个文本文件中

5.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脚本执行结束时,将 SESSIONsession<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.销毁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值。

最新回复(0)