gpt4 book ai didi

php - 在查询前调用 session_write_close 是做什么的?

转载 作者:可可西里 更新时间:2023-11-01 00:20:52 28 4
gpt4 key购买 nike

我想知道 session_write_close() 做了什么。我发现手册有点含糊。我有一些非常大的 SELECT 查询。在那些 SELECT 查询之前,我调用了 session_write_close(),在查询之后,我再次调用了 session_start()

您可能想知道我为什么这样做,如果我不这样做并且用户正在执行其中一个 SELECT 查询并中止它们(例如尝试打开另一个页面),则用户不能不打开新页面(或必须等待很长时间)。我认为是因为脚本正在等待大型查询完成。

所以我的问题是:
session_write_close() 在查询之前调用它到底做了什么?

为什么用户在打开新页面和中止查询时不必等待(在查询之前使用 session_write_close())?


提前致谢

最佳答案

PHP 的默认 session 存储只是硬盘上的一个文件。即,$_SESSION 的内容被简单地转储到磁盘上的文件中。当您调用 session_start 时,该文件被读取并填充 $_SESSION,当脚本结束时,$_SESSION 被写回磁盘。

在这里很容易进入经典的比赛条件。如果两个请求并行进入,并且两个独立的脚本从文件中读取,然后一段时间后这两个脚本写回文件......哪个获胜?文件的内容是什么,是否有一些数据被覆盖了?

对此的解决方案是文件锁定。 PHP 获取 session 文件的锁,以防止其他任何人在解除锁之前读取或写入它。如果两个并行脚本同时尝试获取锁,则其中一个必须等​​到另一个完成。这就是您所看到的。

session_write_close 显式地将 $_SESSION 内容写入磁盘并放弃锁定。

关于php - 在查询前调用 session_write_close 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24263243/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com