我有一个以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';
}
?>
答案 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 ...”