并行运行进程时遇到session_start问题

时间:2012-10-17 17:37:49

标签: php session iframe asynchronous locked

我需要两个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>

1 个答案:

答案 0 :(得分:1)

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

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

您使用session_start()激活会话。

您使用session_commit()停用会话。

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