PHP Sessions

2025年4月17日 | 阅读 5 分钟

PHP 会话用于临时存储和传递信息,直到用户关闭网站。

PHP 会话技术广泛应用于购物网站,用于存储和传递购物车信息,例如用户名、产品代码、产品名称、产品价格等,从一个页面传递到另一个页面。

PHP 会话为每个浏览器创建一个唯一的用户 ID,以识别用户并避免多个浏览器之间的冲突。

PHP 会话工作原理

php session working

PHP 会话通过 服务器 资源工作,这些资源与客户端 Cookie 一起工作,因为它们在页面请求期间保留状态信息。session_start() 函数使 PHP 能够根据分配的会话 ID 建立新的会话或继续现有的会话。每次用户发出请求时,浏览器会发送存储在名为 PHPSESSID(默认)的 Cookie 中的会话 ID。

服务器上的会话以临时文件的形式存在,有时服务由 数据库 存储单元通过它们与会话 ID 的关系提供。PHP 编程语言通过此过程访问管理数据,因为用户与站点页面进行交互。$_SESSION 超全局 数组函数 作为开发者的接口,用于保存和检索在会话通过浏览器关闭或使用 session_destroy() 编程清除或服务器设置的过期参数结束之前跨页面存在的数据。

PHP 的内置会话管理工具通过隔离不同用户帐户之间的数据来确保会话数据的安全性。

PHP session_start() 函数

PHP session_start() 函数用于启动会话。它启动一个新的会话或恢复一个现有的会话。如果会话已创建,则返回现有会话。如果会话不可用,则创建并返回新会话。

此函数的执行需要在发送浏览器输出之前进行,因为它依赖于头部管理来建立会话 Cookie。此函数的底层编程语法支持在基于无状态性的 HTTP 框架内运行的关键有状态交互。

语法

示例

说明

执行时,该函数会在传入请求中搜索会话标识符。如果不存在,该函数会生成一个新的会话 ID,然后将其保存到 Cookie 中,之后设置 $_SESSION 数组。

示例 2

立即执行

输出

Session started at: 14:35:22

说明

会话的初始化通过 session_start() 完成,同时 time() 函数记录时间戳作为 $_SESSION['start_time']。date() 函数提供的格式显示了表示会话开始时间的时间戳。session_start() 函数允许在激活后立即在会话数组中存储数据。

示例 3

立即执行

输出

This is visit number: 1

说明

函数 session_start() 在执行期间会重启或启动会话 操作。代码会检查 $_SESSION['visits'] 是否存在,如果不存在则将其设置为零,或者将其当前计数加一。输出中显示的当前访问次数证明了 session_start() 在连续的网页加载之间保留了数据。

PHP $_SESSION

PHP $_SESSION 是一个关联数组,其中包含所有会话变量。它用于设置和获取会话变量的值。

$_SESSION 变量的访问持续时间贯穿整个活动会话,这使得该工具成为 Web 应用程序状态维护的绝佳选择。系统赋予开发者使用个人识别键保存不同类型数据的能力。

示例 1:存储信息

说明

将用户数据“Thomas”分配给 $_SESSION["user"] 数组 元素。服务器会将此数据存储在用户会话 ID 下,以便在会话保持活动状态(执行 session_start() 后)的任何页面都可以访问它。

示例 2:获取信息

示例

立即执行

输出

Current user: Thomas

说明

此脚本在会话启动和设置 $_SESSION["user"] 后获取“Thomas”并在屏幕上显示。echo 语句直接引用会话数组以显示在整个会话中无缝访问数据的能力。

PHP 会话示例

示例 1

文件:session1.php

示例

立即执行

输出

Session information is set successfully.
Visit next page

文件:session2.php

示例

立即执行

输出

User is: Thomas

说明

会话通过 session1.php 开始,将“Thomas”分配给 $_SESSION["user"],然后提供到 session2.php 的链接。通过恢复第二个文件,可以检索会话数据中存储的值,以证明页面数据可以在不同文件之间无缝移动。

示例 2

文件:login.php

示例

立即执行

输出

Logged in as: Johnny

说明

通过初始化会话,条目定义了 $_SESSION["logged_in"] 和 $_SESSION["username"],然后显示用户名。存储的数据可以在多个页面中使用,这代表了标准的身份验证工作流程。

PHP 会话计数器示例

文件:sessioncounter.php

示例

立即执行

输出

Page Views: 1

说明

对于初始会话创建,会话数组中的计数器变量设置为 1,但在后续访问中,此值会增加 1。当前会话计数显示在输出中,这验证了会话数据在页面刷新期间保持活动状态。

PHP 销毁会话

PHP session_destroy() 函数用于完全销毁所有会话变量。

示例

文件:session3.php

示例

说明

脚本通过 session_destroy() 初始化然后销毁会话,以删除所有存储的变量。没有显示输出表明,在新的会话开始之前,任何进一步尝试检索 $_SESSION 变量都将失败。

结论

PHP 会话允许用户在不将其存储在数据库中的情况下跨 Web 页面共享个人数据。程序员使用 session_start() 启动会话,将信息保存到 $_SESSION 超全局变量中,从而实现跨页面数据访问。您可以通过会话在 Web 开发 中实现各种目的,包括 变量 存储、计数器编程以及用户验证系统,它们对于个性化用户体验至关重要。

PHP 会话的数据安全方面通过 session_destroy() 函数得到保护,该函数在会话数据不再需要时将其清除。会话简化了状态管理任务,从而简化了处理短期数据存储的过程。会话的轻量级特性与其功能设计相结合,使其成为大小型 Web 应用程序的核心元素。


下一个主题PHP 文件