0

我有一个以 session_start() 开头的 php 页面,它将用户信息存储在会话变量中。之后,它进入 (1) 长循环脚本进行计算或 (2) 数据查询部分,具体取决于来自先前表单提交的 _POST 数据。

即使脚本仍在循环并在另一个窗口中获取数据,我也想做一些查询。因此,我将有 2 个窗口选项卡,它们分别具有 (1)、(2) 相同的 php 页面。

问题是,除非我在执行 (1) 时和循环脚本之前使用 session_destroy(),否则这是无法完成的。否则 (2) 将被加载并且无法打开。我真的不想破坏会话,否则用户将不得不一次又一次地登录。那可能吗?谢谢。

ps:当我做(1)并打开一个隐身窗口做(2)时。即使没有 session_destory(),我也没有这个问题。

代码如下所示:

<?php 

session_start();

echo "<form method='post'>
<input type='submit' id='one' name='one' value='one'>
<input type='submit' id='two' name='two' value='two'>
</form>";

$if_one = $_POST["one"];
$if_two = $_POST["two"];
if ($if_one) loop();
if ($if_two) query();

function loop()
{
    //session_destroy();
    $y = 0;

    for ($i=0; $i<20000000; $i++)
    {
         $y += ($i * $i) % 5;
    }
    echo $y;
}

function query()
{
    echo '222';
}

?>
4

3 回答 3

1

我想我刚刚解决了它。而不是使用session_destroy(),session_write_close()可以解决这个问题。

于 2012-09-02T06:20:03.627 回答
0

你不需要这样做,

当你调用 session_start(); 创建了一个会话,并且它一直处于活动状态,直到 php.ini 中的超时或您调用 session_destroy();

您的错误在其他地方,您在回显或打印后调用 session_start 吗?

于 2012-09-01T13:27:45.267 回答
0

听起来问题不在于多个窗口中的会话,而是第一个脚本在输出任何标题之前运行长循环,特别是其他页面需要使用相同会话的会话 ID cookie。您可能应该启动会话并存储变量,然后将用户重定向到另一个页面以进行长循环或输出某种内容,例如“欢迎!开始长循环......”

于 2012-09-01T13:30:08.930 回答