使用对会话数据的引用

时间:2013-11-28 12:31:15

标签: php session

我不太确定这里会发生什么,在我搞砸会话数据之前,也许有人可以向我解释。

当用户登录时,我为该用户创建会话。会话使用ini_set('session.save_path',...)在特殊目录中创建,以防止其他人查看它们。

在页面上,通过Ajax请求调用后台作业来处理某些数据。为此,我需要会话数据(我不需要在会话中写任何东西,只读取)。所以在后台页面中我打电话:

session_start();
$COPY=&$_SESSION;
session_write_close();
$_SESSION=&$COPY;

现在,虽然会话已关闭,但会话数据在整个过程中都可用。

看起来会话在后台作业中关闭后会正常运行。我可以使用会话浏览页面用于其他目的,即使我在后台作业中放置sleep(120);,主页也不会停止。但我不知道到底发生了什么。

所以,我是对的,后台工作不再使用会话吗?或者PHP在某处创建了一个新会话?以这种方式会话数据是否有任何危险?

1 个答案:

答案 0 :(得分:0)

调用$_SESSION不会破坏

session_write_close()。因此,读取会话变量并不需要$COPY=&$_SESSION;

调用session_write_close()后,对$_SESSION的任何操作都无法用于下一个请求。因此,在session_write_close()之后无法修改会话数据。

PHP不会在session_write_close()之后开始新的会话。

示例:如果您不断刷新页面

<pre><?php

session_start();
$_SESSION['t' . time()] = time();
session_write_close();

$_SESSION['p' . time()] = time();
var_export($_SESSION);

?></pre>

您会看到越来越多的t - 时间戳,但只会看到最后p - 时间戳。