2017-02-09 6 views
1

ユーザーログイン&のログアウトにセッションを使用しています。私は30分後にユーザーが非アクティブになると自動的にログアウトしなければならないという要件があります。私は&検索いくつかのソリューションを試みたが、しかし、うまくいかなかった。私は解決策の下に試してみました:30分間何も操作しないとユーザーログアウトを行う方法は?

解決法1:

if(time() - $_SESSION['timestamp'] > 900) { //subtract new timestamp from the old one 
    echo"<script>alert('15 Minutes over!');</script>"; 
    unset($_SESSION['email'], $_SESSION['user_id'], $_SESSION['timestamp']); 
    session_destroy(); 
    $_SESSION['logged_in'] = false; 
    header("Location: " . index.php); //redirect to index.php 
    exit; 
} else { 
    $_SESSION['timestamp'] = time(); //set new timestamp 
} 

対処方法2:

function auto_logout($field) 
{ 
    $t = time(); 
    $t0 = $_SESSION[$field]; 
    $diff = $t - $t0; 
    if ($diff > 3000 || !isset($t0)) 
    {   
    return true; 
    } 
    else 
    { 
    $_SESSION[$field] = time(); 
    } 
} 
if(auto_logout("email")) 
{ 
    session_unset(); 
    session_destroy(); 
    header('Location: index.php'); 
    exit; 
} 

それらのどちらもが働いて、いずれかのユーザーの最後の活動を追跡してその時間を確認する方法を教えてもらえます現在の時間が30分を超えている場合は、そのユーザーをログアウトさせますか?

+0

はあなたがこの – Jer

+0

まず、感謝のために '$アヤックスを()'使用することができますあなたのクイック返信、コードでそれを行う方法を教えてもらえますか? –

答えて

0

私はこれが役立つかもしれないと思う:How do I expire a PHP session after 30 minutes?

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { 
// last request was more than 30 minutes ago 
session_unset();  // unset $_SESSION variable for the run-time 
session_destroy(); // destroy session data in storage 
} 
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 
+0

私はこのコードを "ヘッダ"(または)のどこに置く必要がありますか? $ _SESSION ['user_id']&$ _SESSION ['email']ログイン後、$ _SESSION ['LAST_ACTIVITY'] "のセッションを設定する必要がありますか? –

+0

実際にはこれはあなたの 'ソリューション1'とほぼ同じですが、私は過去数年間はPHPにはあまり関わっていませんが、session_unsetを使ってセッションを終了すると[mail]と[user_id]結局同様に終わるでしょう。 – DevMoutarde

+0

['LAST_ACTIVITY']は一般的な名前にすぎません。希望する名前を付けることができます(例:タイムスタンプはあなたの例です)。これは、リフレッシュされ、タイムアウト値と比較されるだけです。 – DevMoutarde

0

アクティビティを検索するには、以下のようにjavascriptを使用してから、ログアウトページにリダイレクトしてセッションをクリアします。ここで私は、非アクティブの5秒を置く

var t; 
 
    window.onload = resetTimer(); 
 
    // DOM Events 
 
    document.onmousemove = resetTimer(); 
 
    document.onkeypress = resetTimer(); 
 
    console.log('loaded'); 
 

 
function logout() { 
 
     alert("You are now logged out.") 
 
     //location.href = 'logout.php' 
 
    } 
 

 
    function resetTimer() { 
 
\t \t 
 
     clearTimeout(t); 
 
     t = setTimeout(logout, 5000) 
 
     
 
    }

+0

ありがとうAzeez、どこにこのコードを置く?それは$(document).ready()関数にありますか? –

+0

$(document).ready()は必要ありません。このを置くことができます。すべてのページに表示されるようにヘッダーファイルに入れてください。 –

+0

あなたのコードと回答を理解しました。私はそれも確かにうまくいくと思いますが、他の答えが私のために働いていたのでPHPを使用していますjavascriptコードを含める必要はありません。とにかくお返事ありがとうございました。 –