0

両方の iframe フォームが独立して (非同期で) 動作する必要がありますが、両方のフォームを同時に送信すると、2 番目の iframe レポート「致命的なエラー: C:\wamp\www\iframe2.php の 2 行目で最大実行時間が 30 秒を超えました」 " (iframe1 クエリが長いプロセスの場合) または 2 番目の 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>
4

1 に答える 1

1

デフォルトの PHP セッションでは、ファイル アクセスがブロックされています。つまり、最初のスクリプトでセッションがまだアクティブである限り、2 番目のスクリプトのセッションへのアクセスはブロックされます。PHP は、セッションが再びアクセス可能になるまで待機します。

多くの場合、解決策は、アクティブな期間の期間を短く保つことです。通常、セッションは常にアクティブである必要はありません。

でセッションをアクティブにしsession_start()ます。

でセッションを非アクティブにしsession_commit()ます。

実際にアクティブなセッションが必要なスクリプトの部分を見つけます。できるだけ遅く開き (開始)、できるだけ早く閉じます (コミット)。

于 2012-10-17T17:42:21.140 に答える