6

X分間操作がないと、ユーザーが自動的にログアウトするようにします。また、すべてのセッションを破棄してもらいたいです。

これはどのように行うことができますか?非アクティブをチェックしてからログアウトする機能を実行するにはどうすればよいですか?

4

10 に答える 10

10

私はミシェルのアプローチに疲れて、どこにも行きませんでした。調査したところ、ifステートメントは単に現在の時刻に有効期限を追加しただけなので、ステートメントが実行されることはありませんでした。

これは私の変更されたバージョンです:

ユーザーにログインするとき、または安全なページをロードするときに、これを設定します。

 $_SESSION['expire'] = time()+1*60;

そして、これを使用して、有効期限が現在の時間よりも短いかどうかを確認します(つまり、有効期限を過ぎています)。

if(time() > $_SESSION['expire']){
 $user -> logout();
}
于 2011-01-10T10:21:57.620 に答える
4

次のようにセッションタイムアウト制限を設定できます。

ini_set('session.gc_maxlifetime',30);

これがあなたのための可能な解決策です。

于 2010-06-18T10:47:09.080 に答える
3

次のこともできます。

$_SESSION['loginTime'] = time();

すべてのページで、ユーザーがナビゲートしようとして20分間非アクティブになっている場合は、次のようにログアウトできます。

if($_SESSION['loginTime'] < time()+20*60){ logout(); }
于 2010-06-18T10:51:44.067 に答える
2

サーバーの速度とユーザー数に応じて、ユーザーが何かを行う(ナビゲートする、ボタンをクリックするなど)たびにサーバーにリクエストを送信させることができます。このリクエストから、SQLテーブルを最後のアクティビティ時間で更新します。

一定の間隔でcronジョブをテーブルで実行し、しきい値が何であれ、非アクティブになっているユーザーのセッションを削除します。

サーバーの速度が遅い場合やユーザーが多い場合は、このスクリプトを頻繁に実行しないようにすることができます。

于 2010-06-18T10:46:22.040 に答える
2

PHPのセッションメカニズムには、非アクティブタイムアウトに基づくガベージコレクタがすでにあります。心配する必要はありません。

于 2010-06-18T10:52:00.240 に答える
1

$ _SESSION ['lastactive'] = time()で最後のアクティブ時間を設定し、ユーザーが新しいページに移動するたびに更新することができます。次に、すべてのページに関数timeout()を設定できます。

function timeout()    
{
    $maxtime = 60*2; // Here , maxtime has been set to 2 minutes

if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] > $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit.
{
    signout(); //logging out        
}

if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] < $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit.
{   
    return 1; // timeout limit not exceeded     
}   
else
{
    if(!isset($_SESSION['lastactive']))
    {

        $_SESSION['lastactive'] = time(); //if lastactive is not set
    }
}
}
于 2016-12-16T04:33:32.183 に答える
0

unset($_SESSION['NAME']);またはを使用しsession_destroy();ます。セッションの値を変更することもできます。

特定の時間にこれを行うには、データベースにタイムスタンプを設定し、それを呼び出してX分を超えているかどうかを確認する必要があります。下部のリンクを見てください。

個人的にはCookieを使用して、特定の時間に期限切れにするだけですが、ボートに浮かぶものは何でもかまいません。

現在の時刻が時刻X(データベースから)を30秒以上過ぎている場合

于 2010-06-18T10:47:10.063 に答える
0


$(document).ready(function()
{
setTimeout(function(){ CALL LOGOUT.PHP VIA AJAX }、720000);

});

720000は、12分(説明のため)を意味
します。このスクリプトをヘッダーに配置し、非アクティブの時間を設定し
ます。必要な時間を設定できます。5分を設定すると、システムにログインしてからカウントが開始されます。 5分間。ただし、モジュールをクリックすると、このスクリプトがリロードされます。ページがめくられると、スクリプトがリロードされるときにヘッダーもリロードされるため、0(初期)からカウントが開始されますが、5分以内にシステムにアクセスできない場合。次に、logout.phpをロードし、システムがログアウトします

于 2014-11-27T09:24:11.637 に答える
0

これは私がそれをする方法です:

//set timeout period in seconds
$idleTime= 60*2;
//check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout'])){
$session_life = time() - $_SESSION['timeout'];
if($session_life > $idleTime){
// your logout code here*
     }
}
$_SESSION['timeout'] = time();

これにより、ページがリロードされるたびに$ _SESSION ['timeout']がリセットされます。これは、すべてのサブページのヘッダーにあるインクルードファイルにあり、少なくとも機能します。

于 2017-01-18T08:40:33.587 に答える
0

最も簡単な方法はこれです。ユーザーがWebサイトの特定の要素をアクティブにしていない場合は、ユーザーをログアウトページに送ります

$secondsWait = 300; // these are seconds so it is 300s=5minutes
header("refresh:$secondsWait; logout.php");

リダイレクトの内容...logout.php、セッションを破棄し、ログアウトした理由をユーザーに警告するメッセージを送信することもできます

<?php
session_start();
session_unset();
session_destroy();  
?>
于 2017-09-12T17:39:12.367 に答える