打开多个窗口选项卡时出现php会话问题


php session problems when opening multiple window tabs

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

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

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

p.s:当我做(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';
}
?>

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

你不需要这么做,

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

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

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