PHP基础
# 为什么要使用php会话技术
http协议本身是无状态的,用户在两个不同的页面发起请求,对于服务端而言是无法坚定请求是否是来源于同一个用户。会话控制就是为了解决这种问题,用于识别用户请求。
# cookie如何操作?
// 设置cookie
setcookie($name,$value,$expire,$path,$domain,$secure);
// 读取cookie
$_COOKIE
// 删除cookie
setcookie($name, '', time() - 1000)
1
2
3
4
5
6
2
3
4
5
6
# cookie优点和缺点
- cookie将信息存储在客户端,不会占用服务器资源。
- Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见。
- 由于在HTTP请求中的cookie是明文传递的,潜在的安全风险,Cookie 可能会被篡改
# session
Session基于cookie的,存储在服务器端,用户每次请求浏览器的时候会携带sessionID,服务端根据sessionID来读取会话。
session如何操作?
// 开启session
session_start();
// 读取session
$_SESSION
// 清空session
$_SESSION = [];
// 删除session文件
session_destroy();
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
php.ini中session如何配置?
// 是否自动开启session_start
session.autostart
// 存储session的cookie的有效域名是什么
session.cookie_domain
// 存储session的cookie路径
session.cookie_path
// 存储的sessionid的名称
session.name
// 存储的session的路径
session.save_path
// session的垃圾回收
// 每100次调用session_start会有一次去清文件,清空当前时间-文件最后修改时间大于gc_maxlifetime的文件
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
// session存储的句柄
session.save_handler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# session的优缺点
由于存储在服务器端所以比较安全,但是由于存储在服务器端会存在服务器资源占用问题
# 传递SessionID的问题
1、session是基于cookie的,但是如果我们禁用掉cookie的话,该怎么办呢?
可以使用session_name()和session_id()来传递或者SID
// 可以使用session_name()和session_id()
<a href="demo.php?SESSIONID=<?php echo session_name()."=".session_id()?>">下个页面</a>
// 使用SID,如果开启cookie的话,SID是空,否则就是session_name()和session_id()的拼接
<a href="demo.php?SESSIONID=<?php echo SID?>">下个页面</a>
1
2
3
4
5
2
3
4
5
上次更新: 2020/12/31, 06:55:18