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

时间:2012-09-01 13:20:56

标签: php session

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

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

问题是,除非我在执行(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';
}

?>

3 个答案:

答案 0 :(得分:1)

我想我刚解决了。 session_destroy()不会使用session_write_close()来解决此问题。

答案 1 :(得分:0)

你不需要这样做,

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

你的错误在其他地方,你在echo或print之后调用session_start吗?

答案 2 :(得分:0)

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