PHP 中的会话支持提供了一种在后续访问中保留某些数据的方法。
访问您网站的访问者将被分配一个唯一的 ID,即所谓的会话 ID。这存储在用户端的 Cookie 中,或者在 URL 中传播。
会话支持允许您在 $_SESSION 超全局数组中请求之间存储数据。当访问者访问您的网站时,PHP 将自动检查(如果 session.auto_start 设置为 1)或根据您的请求(通过 session_start() 明确指定)是否已使用请求发送了特定会话 ID。如果是这种情况,则会重新创建先前保存的环境。
如果您启用 session.auto_start,则将对象放入会话的唯一方法是使用 auto_prepend_file 加载其类定义,您可以在其中加载类定义,否则您必须 serialize() 您的对象,然后 unserialize() 它。
$_SESSION(以及所有已注册的变量)在请求完成后,由 PHP 使用 session.serialize_handler ini 设置指定的序列化处理程序在内部序列化。未定义的已注册变量被标记为未定义。在后续访问中,除非用户稍后定义它们,否则会话模块不会定义它们。
因为会话数据被序列化,所以无法在会话中存储 资源 变量。
序列化处理程序(php
和 php_binary
)继承 register_globals 限制。因此,不能使用包含特殊字符(|
和 !
)的数字索引或字符串索引。使用这些字符会导致脚本关闭时出现错误。php_serialize
没有此类限制。
提示:
请注意,在使用会话时,只有在通过向 $_SESSION 超全局数组添加新键来注册变量后,才会创建会话记录。无论是否使用 session_start() 函数启动会话,这都是正确的。