PHP 会话未更新

PHP Session not updated

我正在 php/ajax 中建立聊天。为了检测用户超时,我编写了一个后台 php 脚本,如果 5 秒内没有 activity 则断开用户连接。

问题是,会话中的变量没有更新...

这是我的 chat.php 执行所有 ajax 查询的地方(至少每秒和每个客户端 1 个):

<?php
session_save_path("sessions");
session_start();
$_SESSION['last_request'] = time();

以下是我如何从此 chat.php 启动后台脚本:

exec('php user_manager.php ' . session_id() . ' > /tmp/output &');

这是我检查用户是否还在这里的循环(这是后台进程):

<?php
session_save_path("sessions");
session_id($argv[1]);
session_start();
ignore_user_abort(true);
set_time_limit(0);

echo "background task starting on user " . $_SESSION['user'] . PHP_EOL;

$lastrequest = $_SESSION["last_request"];

while(time() - intval($lastrequest) < 5) { //5 seconds
    echo "last_request : " . $lastrequest . PHP_EOL;
    $lastrequest = $_SESSION["last_request"];
    sleep(1);
}

echo "disconnecting user !" . PHP_EOL;

如您所见,last_request 会话变量永远不会更新:

# cat /tmp/output
background task starting on user test
last_request : 1493120020
last_request : 1493120020
last_request : 1493120020
last_request : 1493120020
last_request : 1493120020
disconnecting user !

我不明白为什么,这让我发疯...请帮忙!

$_SESSION数组在session_start初始化,但之后不会被用户聊天脚本修改。 您应该为每个会话使用一个文件,其中 chat.php 写入上次访问时间。后台进程必须在 while 块中读取此文件。

聊天脚本:

<?php
session_save_path("sessions");
session_start();
file_put_contents('access_' . session_id() . '.txt', time());

后台进程:

<?php
session_save_path("sessions");
session_id($argv[1]);
session_start();
ignore_user_abort(true);
set_time_limit(0);

echo "background task starting on user " . $_SESSION['user'] . PHP_EOL;

$lastrequest = file_get_contents('access_' . session_id() . '.txt');

while(time() - intval($lastrequest) < 5) { //5 seconds
    echo "last_request : " . $lastrequest . PHP_EOL;
    $lastrequest = file_get_contents('access_' . session_id() . '.txt');
    sleep(1);
}

echo "disconnecting user !" . PHP_EOL;