2012-03-12 13 views
1

現在、セッションタイムアウトに取り組んでいます。 特定の時間内に自分のページがアクティブでない場合、 セッションはタイムアウトしてログインページに戻ります。アクティブでないためにセッションタイムアウトを設定する

私はこのコードを持っています。

// set timeout period in seconds 
$inactive = 30; 
// check to see if $_SESSION['timeout'] is set 
$logger->debug("root|DEBUG3 accdetails_proc"); 
if(isset($_SESSION['timeout'])) { 
    $session_life = time() - $_SESSION['timeout']; 
    if($session_life > $inactive) 
    { 
     session_destroy(); 
     header("Location: ../../index.php"); 
      ///OR 
     //echo('<script type="text/javascript">'); 
     //echo('top.location.href = "../../index.php"'); 
     //echo('</script>'); 
    } 
    else{ } 

ヘッダーとエコーの両方が機能していません。タイムアウトすると、 はsession_destroy()で停止し、コールバック( )を実行します。これは、このファイルをajaxを使用して呼び出しているためです。

私は「エコー」を使用する場合、応答は次のとおりです。私のコールバックで解析されたときに、既にエラーを与え

<script type="text/javascript">top.location.href = "../../index.php"</script>'); 

"header"を使用すると、ログインページ のhtmlが返されますが、最初にコールバックが実行されるので、エラー が出力され、ログインページはロードされません。

セッションを破棄すると、誰かがajaxのコールバックを実行しない方法を助けることができますか?

おかげ

答えて

1

あなたは、セッションがタイムアウトした場合にチェックするためのAjaxコールバックを使用している場合は、あなたは、Ajaxのデータのハンドラにスタートページにリダイレクトを処理する必要があります。

あなたのPHPは、次のようになります。

if(isset($_SESSION['timeout'])) { 
    $session_life = time() - $_SESSION['timeout']; 
    if($session_life > $inactive) 
    { 
     session_destroy(); 
     echo "LOGOUT"; 
    } 
} 
echo "OK"; 
ページ上

あなたのJavaScriptコードは、(あなたはjQueryのを使用すると仮定して)次のようになります。あなたが同じロジックを追加する必要がある必要があり

$.get('http://example.com/my_session_check.php', function(data){ 
    if(data=='LOGOUT') { 
    top.location.href="../../index.php"; 
    } 
}); 
0

をあなたがヘッダファイルで使用しているajaxで。タイムアウト応答をコールバック関数に送り、コールバックでアラートを表示し、必要に応じてブラウザーをリダイレクトすることができます。

関連する問題