PHP Session的用法(附带实例)
在浏览器中存储的 Cookie 对用户是可见的,容易被非法获取。另外,当 Cookie 中存储的数据量非常大时,每次请求服务器浏览器都会带着 Cookie,非常耗费资源。此时,使用 Session 可以解决上述问题。
Session 存储在服务器端,能够实现数据跨脚本共享,Session 依赖于 Cookie。
当浏览器访问服务器时,服务器会为浏览器创建一个 Session id 和一个对应的 Session 文件,将核心数据存储在 Session 文件中,并将 Session id 放入 Cookie 返回给浏览器。浏览器再次访问服务器时,服务器会根据 Cookie 中的 Session id 打开对应的 Session 文件获取核心数据。
Session 的实现原理如下图所示:

图 1 Session的实现原理
PHP 程序启动 Session 后,服务器会为每个浏览器创建一个供其独享的 Session 文件。Session 文件的保存机制如下图所示:

图 2 Session文件的保存机制
在图 2 中,每一个 Session 文件都具有唯一的 Session id,用于标识不同的用户。Session id 分别保存在浏览器和服务器端,浏览器通过 Cookie 保存;服务器端则以 Session 文件的形式保存,Session 文件保存路径为 php.ini 中 session.save_path 配置项指定的目录。
下面演示 Session 的基本使用方法,示例代码如下:
在程序中通过 session_start() 函数可以对 Session 进行配置。该函数接收关联数组形式的参数,数组的键名不包括“session.”,直接书写其后的配置项名称即可。
示例代码如下:
注意,session_start() 函数对配置项的修改只在 PHP 脚本的运行周期内有效,不影响 php.ini 的原有设置。
Session 存储在服务器端,能够实现数据跨脚本共享,Session 依赖于 Cookie。
当浏览器访问服务器时,服务器会为浏览器创建一个 Session id 和一个对应的 Session 文件,将核心数据存储在 Session 文件中,并将 Session id 放入 Cookie 返回给浏览器。浏览器再次访问服务器时,服务器会根据 Cookie 中的 Session id 打开对应的 Session 文件获取核心数据。
Session 的实现原理如下图所示:

图 1 Session的实现原理
PHP 程序启动 Session 后,服务器会为每个浏览器创建一个供其独享的 Session 文件。Session 文件的保存机制如下图所示:

图 2 Session文件的保存机制
在图 2 中,每一个 Session 文件都具有唯一的 Session id,用于标识不同的用户。Session id 分别保存在浏览器和服务器端,浏览器通过 Cookie 保存;服务器端则以 Session 文件的形式保存,Session 文件保存路径为 php.ini 中 session.save_path 配置项指定的目录。
PHP Session的基本用法
Session 的基本使用方法包括开启 Session、操作 Session 数据和销毁 Session 等内容。下面演示 Session 的基本使用方法,示例代码如下:
session_start(); // 开启Session $_SESSION['name'] = 'tom'; // 向Session中添加字符串 $_SESSION['id'] = [1, 2, 3]; // 向Session中添加数组 unset($_SESSION['name']); // 删除单个数据 $_SESSION = []; // 删除所有数据 session_destroy(); // 销毁Session在上述示例代码中,使用“$_SESSION=[];”的方式删除所有数据时,Session 文件仍然存在,只不过它是一个空文件。如果想要将这个空文件删除,需要使用 session_destroy() 函数销毁 Session。
PHP Session的配置
php.ini 中有许多和 Session 相关的配置,常用的配置如下表所示:配置项 | 含义 |
---|---|
session.name | 指定 Cookie 的名称,只能由字母和数字组成,默认为 PHPSESSID |
session.save_path | 读取或设置当前会话文件的保存路径,默认为 C:\Windows\Temp |
session.auto_start | 指定是否在请求开始时自动启动一个会话,默认为 0(不启动) |
session.cookie_lifetime | 以秒数指定发送到浏览器的 Cookie 的生命周期,默认为 0(直到关闭浏览器) |
session.cookie_path | 指定要设定会话 Cookie 的路径,默认为 “/” |
session.cookie_domain | 指定要设定会话 Cookie 的域名,默认为无 |
session.cookie_secure | 指定是否仅通过安全连接发送 Cookie,默认为 off |
session.cookie_httponly | 指定是否仅通过 HTTP 访问 Cookie,默认为 off |
在程序中通过 session_start() 函数可以对 Session 进行配置。该函数接收关联数组形式的参数,数组的键名不包括“session.”,直接书写其后的配置项名称即可。
示例代码如下:
session_start(['name' => 'MySESSID']);上述代码表示将“session.name”的配置项的值修改为“MySESSID”。
注意,session_start() 函数对配置项的修改只在 PHP 脚本的运行周期内有效,不影响 php.ini 的原有设置。