Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打开多个窗口选项卡时出现php会话问题_Php_Session - Fatal编程技术网

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

打开多个窗口选项卡时出现php会话问题,php,session,Php,Session,我有一个以session_start()开头的php页面,它将用户信息存储在session变量中。之后,它进入(1)长循环脚本进行计算或(2)数据查询部分,具体取决于上一个表单提交中的_POST数据 我想做一些查询,即使脚本仍然在另一个窗口中循环和获取数据。因此,我将有两个窗口选项卡,它们与分别执行(1)、(2)的php页面相同 问题是,除非在执行(1)和循环脚本之前使用session_destroy(),否则无法执行此操作。否则(2)将加载且无法打开。我真的不想破坏会话,否则用户将不得不一次又

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

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

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

p、 s:当我这样做(1)和我打开一个匿名窗口做(2)。即使没有session\u 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_start()时;创建了一个会话,它一直处于活动状态,直到php.ini中的超时或调用session_destroy()


您的错误在其他地方,是否在echo或print之后调用session_start?

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

我想我刚刚解决了这个问题。使用
session\u destroy()
session\u write\u close()
将解决此问题

考虑到代码或多或少都是逻辑性的,我发现如果发布代码,遵循逻辑过程会更容易。确切地说,为什么需要使用
session\u destroy
?cookie/头是否在长循环之前发送?如果没有,问题是会话尚未启动,从某种意义上说,浏览器具有要带到新窗口的会话ID。我可以在销毁会话时查询(1)是否循环。我将试着发布一个简短的代码。session_start()是我的php文件的第一行。@@@Chandler-长循环是在回显或打印之前还是之后开始的?我现在正试图将它保持在同一页中。但这似乎是可行的,如果我的问题无法解决,我会试试。