PHP Conference Japan 2024

SessionHandlerInterface::write

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

SessionHandlerInterface::write写入会话数据

描述

public SessionHandlerInterface::write(string $id, string $data): bool

将会话数据写入会话存储。由 session_write_close() 调用,当 session_register_shutdown() 失败或在正常关闭期间调用。注意:SessionHandlerInterface::close() 会在此函数之后立即被调用。

当会话准备保存并关闭时,PHP 将调用此方法。它将来自 $_SESSION 超全局变量的会话数据编码为序列化字符串,并将此数据与会话 ID 一起传递给此方法进行存储。使用的序列化方法在 session.serialize_handler 设置中指定。

请注意,此方法通常在输出缓冲区关闭后由 PHP 调用,除非由 session_write_close() 显式调用。

参数

id

会话 ID。

data

编码后的会话数据。此数据是 PHP 内部将 $_SESSION 超全局变量编码为序列化字符串并将其作为此参数传递的结果。请注意,会话使用另一种序列化方法。

返回值

返回值(通常在成功时为 true,失败时为 false)。请注意,此值会内部返回给 PHP 以进行处理。

参见

添加注释

用户贡献的注释 3 个注释

jotremb at hotmail dot com
7 年前
需要注意的是,如果从此方法返回 FALSE,PHP 将依次输出以下警告

Warning: Unknown: Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0.

这可能会造成一些小麻烦,但是如果根据设计不应该写入会话,那么在处理(并且不写入)会话后返回 TRUE 将避免进一步的问题。

总而言之,除了硬错误情况外,最好始终返回 TRUE。
barkoczi dot roland at aercode dot com
9 年前
注意:如果 $session_data 未更改,则不会调用此函数。为了在每次会话即将关闭时调用此函数,请添加 $_SESSION["timestamp"] = time();
Aeric Poon
5 年前
Warning: session_write_close(): Session callback expects true/false return value in Unknown on line 0

我在 write() 中返回了 TRUE,但警告仍然存在。然后我在 close() 中也返回了 TRUE,警告消失了。
To Top