2009-02-26 23 views
0

コンテキスト:mod_rewrite(フロントページの読み込み中の子ページ)を使用してアプリケーションを構築しようとしていましたが、フロントコントローラページからsession_enabledページを読み込む際にスタックしました。2つのsession_starts()がPHPアプリケーションをハングします

問題:問題は、私がsession_start()呼び出しtwiseを使用して、PHPページが応答を停止することです。これは奇妙なことですが、session_start関数は無害で、別のページで呼び出されます。

child.phpファイル:

parent.phpファイル:

コール

は、私は、このサンプルに問題を絞り込むましたto parent.phpはブラウザに無限に負荷をかけます。 session_start()呼び出しの1つをコメントするとすぐに、即座に読み込まれます。

問題の原因は何ですか? セッションが有効になっているページがひどく必要です。

PS私はページを含めることでうまくいくかもしれませんが、URLパラメータに依存しています。パラメータプロキシのようなものを修正することは避けたいと思います。

答えて

1

を一度に使用することができます。あなたは、新しいIDを生成するsession_regenerate_id functionを呼び出す必要があります:

if (session_id() != '') { 
    session_write_close(); 
} 
session_start(); 
session_regenerate_id(); 

そうでない場合は、親のセッションIDは、子のセッションのために使用されます。

5

セッションに書き込む必要がなくなれば、session_write_close()に電話する必要があります。現在のところ、両方のスクリプトがセッションを開いている間は、一度に1つのセッションしか実行できません。セッションデータは通常session_write_close()、 を呼び出しますが、セッションデータが にロックされているとして一つだけ スクリプトが動作することが可能で同時書き込みを防ぐために 必要なく終了 スクリプトの後に保存されている

the manua Lから

任意の 時にセッションでフレームセットを一緒に使用すると、 セッションでは、 ロックのために、フレームが1つずつロードされて になります。すべてのフレームをロードするのに、 が必要な時間を減らすことができます セッション変数への変更が完了するとすぐに、セッションを終了する

0

あなたのスクリプトに2つのsession_start()があることは、とにかく悪いことです。

あなたはparent.phpファイル(child.phpではなく)でセッションを開始してみませんか? またはparent.phpだけでなく、parent.php

すべてを初期化するすべてのページ(SQL接続、セッション開始など)に含まれる1ページを持つことをお勧めします。そして、他のすべてのページにそのページを含める。

1

また、セッションがすでに開始されているかどうか確認してのみ、いない場合は、新しいものを起動することができます。それだけで一つのセッションに加えて

if (!isset($_SESSION)) session_start(); 
+0

この場合、セッションは同じページで開始されません。 – kmkaplan

+0

同じページのように見えますが、別のスクリプトです。私はセッションを開始する必要があるときにajax呼び出しとは対照的にセッションが既に開始されているときに、初期ページのロード時にajaxインクルードで同じセッションを使用するためにこれを使用しています。 – jeroen

関連する問題