2012-10-17 75 views
0

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

的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

为什么在'iframe2.php'中没有'set_time_limit(120);'? – Orbling

回答

1

默认PHP会话阻塞文件访问。这意味着只要您的第一个脚本中的会话仍然是活动,则会阻止第二个脚本访问会话。 PHP将一直等到会话可以再次访问。

解决方案通常是保持活动期的时间间隔短。通常,会话不需要始终处于活动状态。

您使用session_start()激活会话。

您使用session_commit()停用会话。

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