3

我很想知道会话文本文件的确切创建时间?一个简单而表面的答案可能是......好吧,当你使用 session_start() 时。但是是吗?php脚本结束时会一直到最后吗?

是什么让我认为它可能在最后是我知道 PHP 不会在页面执行期间每次更改会话变量时写入会话文件。例如,如果您有类似$_SESSION['x'] = $_SESSION['x'] + 1;循环的内容,则会话文件不会循环的每次迭代中都被修改。只有当 PHP 脚本完成后,PHP 引擎才会对文件进行更改,以存储$_SESSION['x'].

使用相同的逻辑,我认为 PHP 引擎没有理由在您调用 session_start 后立即创建文件。它可能只是延迟这个过程。

这意味着什么;

我可以使用 开始一个会话session_start(),设置一些会话变量,在函数中将它们扔掉,将它们用作全局变量,在脚本结束时,我取消设置它们,并销毁会话,因此,我假设没有会话文件已创建,因此不会遇到与创建会话文本文件相关的开销。

我想听听您对此的见解。

我的目的是探索严格使用会话变量作为临时占位符来左右传递全局变量的可能性——而不处理文件 I/O。事实上,我根本不需要下一页中的那些变量。

在这种情况下,会话能否证明比在函数中使用全局变量更快?

4

1 回答 1

2

经过测试,它会立即session_start. 但是,session_destroy也将其删除。经测试:

mkdir sess && cd sess
vim main.php

session_save_path(dirname(__FILE__));
session_start();
sleep(5);
session_destroy();

php main.php &
ls # main.php   sess_rm4bcun6ear943mf61mdads190
fg # wait for script to end
ls # main.php

你的问题就有答案了。您将_SESSION用于全局变量目的的想法不是一个好主意..您不妨使用$GLOBALS. 那里没有文件 IO。

于 2012-09-20T14:27:43.403 回答