需要注意的是,如果从该方法返回 FALSE,PHP 将依次输出以下警告
警告:未知:无法写入会话数据 (用户)。请验证 session.save_path 的当前设置是否正确 (/var/lib/php/session) 在 Unknown 第 0 行。
这可能会导致一些小问题,但是如果会话不应该根据设计写入,那么在处理(而不写入)会话后返回 TRUE 将避免进一步的问题。
总而言之,除了硬错误情况以外,最好始终返回 TRUE。
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SessionHandlerInterface::write — 写入会话数据
将会话数据写入会话存储。由 session_write_close() 调用,当 session_register_shutdown() 失败时,或在正常关闭期间调用。注意: SessionHandlerInterface::close() 在此函数之后立即调用。
当会话准备保存并关闭时,PHP 将调用此方法。它将来自 $_SESSION 超级全局变量的会话数据编码为序列化字符串,并将此字符串与会话 ID 一起传递给此方法以进行存储。使用的序列化方法在 session.serialize_handler 设置中指定。
注意,此方法通常在输出缓冲区关闭后由 PHP 调用,除非由 session_write_close() 显式调用。
id
会话 ID。
data
编码后的会话数据。此数据是 PHP 内部将 $_SESSION 超级全局变量编码为序列化字符串并将其作为此参数传递的结果。请注意,会话使用备用序列化方法。
需要注意的是,如果从该方法返回 FALSE,PHP 将依次输出以下警告
警告:未知:无法写入会话数据 (用户)。请验证 session.save_path 的当前设置是否正确 (/var/lib/php/session) 在 Unknown 第 0 行。
这可能会导致一些小问题,但是如果会话不应该根据设计写入,那么在处理(而不写入)会话后返回 TRUE 将避免进一步的问题。
总而言之,除了硬错误情况以外,最好始终返回 TRUE。
注意:如果 $session_data 未更改,则不会调用此函数。为了在每次会话即将关闭时调用此函数,请添加 $_SESSION["timestamp"] = time();
警告:session_write_close(): 会话回调需要 true/false 返回值在 Unknown 第 0 行
我在 write() 中返回了 TRUE,但警告仍然存在。然后我在 close() 中也返回了 TRUE,警告消失了。