0

我需要两个 iframe 表单独立工作(异步),但是当我同时提交两个表单时,第二个 iframe 报告“致命错误:第 2 行的 C:\wamp\www\iframe2.php 中超过 30 秒的最大执行时间"(当 iframe1 查询是一个长进程时)或第二个 iframe 在第一个进程完成后返回数据(当 iframe1 查询是一个短进程时)。现在,我需要保留会话以验证用户登录。我需要你的帮助,我的朋友们!谢谢

索引.php

<html>
<head>
<title></title>
</head>
<body>
<iframe src="iframe1.php" width="300" height="400"></iframe>
<iframe src="iframe2.php" width="300" height="400"></iframe>
</body>
</html>

iframe1.php(返回查询结果)

<?php
session_start();

if($_SESSION['user'])
  $data="Valid user";
else
  header("location: login.php");

set_time_limit(120);
require_once("config.php"); //db conections
if($_POST)
{
  //query (long process)
  $data.= ""; // concatenated string with query results
}

?>
<html>
<head>
<title></title>
</head>
<body>
<?php echo session_id();?>
<form method="post">
ini:<input type="text" name="var1" value="" /><br />
fin:<input type="text" name="var2" value="" /><br />
<input type="submit" value="Send" />
</form>
Result:<br />
<?php
if(isset($data))
  echo session_id()."<hr>".$data;
?>
</body>
</html>

iframe2.php(只返回 123456)

<?php 
session_start();

if($_SESSION['user'])
  $data="Valid user";
else
  header("location: login.php");

if($_POST)
{
  $data =  "123456";
}
?>
<html>
<head>
<title></title>
</head>
<body>
<?php echo session_id();?>
<form method="post">
<input type="text" name="inpt" />
<input type="submit" value="frame2" />
</form>

Result:<br />
<?php
if(isset($data))
  echo session_id()."<hr>".$data;
?>
</body>
</html>
4

1 回答 1

1

默认 PHP 会话具有阻止文件访问。这意味着只要在您的第一个脚本中会话仍然处于活动状态,第二个脚本对会话的访问就会被阻止。PHP 将等到会话再次可访问。

解决方案通常是保持活跃期的时间跨度较短。通常会话不需要一直处于活动状态。

您使用 激活会话session_start()

您使用 停用会话session_commit()

找到您实际需要活动会话的脚本部分。尽可能晚地打开它(开始)并尽快关闭(提交)它。

于 2012-10-17T17:42:21.140 回答