我需要两个iframe表单独立工作(异步),但是当我同时提交两个表单时,第二个iframe报告“致命错误:C:\ wamp \ www \ iframe2.php中超出了30秒的最大执行时间在第2行“(当iframe1查询是一个长进程时)或第二个iframe在第一个进程完成后返回数据(当iframe1查询是一个短进程时)。 现在,我需要保持会话以验证用户登录。 我的朋友,我需要你的帮助!感谢
的index.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>
答案 0 :(得分:1)
默认PHP会话具有阻止文件访问权限。这意味着只要在您的第一个脚本中会话仍然是活动,就会阻止第二个脚本对会话的访问。 PHP将等到会话再次可访问。
解决方案通常是保持活动期间的时间跨度。通常情况下,会话不需要一直处于活动状态。
您使用session_start()
激活会话。
您使用session_commit()
停用会话。
找到实际需要活动会话的脚本部分。尽可能晚地打开它(开始)并尽快关闭(提交)它。