0

私のlogout.phpコード

<?php 
 $past = time(0); 
 setcookie(ID_my_site, gone, $past); 
 setcookie(Key_my_site, gone, $past); 
 header("Location: index.php"); 
 ?>

ユーザーがブラウザを閉じたときにログアウトし、ブラウザの戻るボタンをクリックした場合、このコードに何を追加する必要がありますか??

私のlogin.phpコード

<?php 
$page = "login";
mysql_connect("localhost","root","");
mysql_select_db("nell");
 if(isset($_COOKIE['ID_my_site']))
 { 
    $username = $_COOKIE['ID_my_site']; 
    $pass = $_COOKIE['Key_my_site'];
        $check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
    while($info = mysql_fetch_array( $check ))  
        {
        if ($pass != $info['password']) 
            {                       }
        else
            {header("Location: members.php");}
        }
    }
 if (isset($_POST['submit'])) { 
    if(!$_POST['username'] | !$_POST['pass']) 

    { header("Location: error.php");}

    if (!get_magic_quotes_gpc()) {
        $_POST['email'] = addslashes($_POST['email']);
    }
    $check = mysql_query("SELECT * FROM users WHERE username = '".$_POST['username']."'")or die(mysql_error());
 $check2 = mysql_num_rows($check);
 if ($check2 == 0) 

    { header("Location: error2.php");}

 while($info = mysql_fetch_array( $check ))     
 {
 $_POST['pass'] = stripslashes($_POST['pass']);
    $info['password'] = stripslashes($info['password']);
    $_POST['pass'] = md5($_POST['pass']);
if ($_POST['pass'] != $info['password']) 

        { header("Location: error3.php");}

     else 
 { 
     $_POST['username'] = stripslashes($_POST['username']); 
     $hour = time() + 3600; 
 setcookie(ID_my_site, $_POST['username'], $hour); 
 setcookie(Key_my_site, $_POST['pass'], $hour);   
 header("Location: members.php"); 
 } 
 } 
 } 
 else 
{    }
 ?> 

ユーザーがブラウザを閉じたとき、およびブラウザの戻るボタンをクリックしたときに、ユーザーを自動的にログアウトさせたいです。

4

2 に答える 2

3

ユーザーがブラウザを閉じるタイミングを PHP で判断することはできません。PHP に関する限り、ページはユーザーに送信され、PHP はそれで完了します。

Cookie を使用する代わりに、セッションを使用して、ユーザー マシンとの接続を改善することができます。セッション タイムアウトを数分に設定することもできますが、読むのが遅い人やページ間を移動するのに時間がかかる人がロックアウトされるリスクがあります。

ユーザーのログアウトに関して本当に意地悪になりたい場合は、通常の「チェックイン」でjavascriptを実行して、セッションを維持するためにサーバーにデータを送信するなどのことを行う必要がある場合があります-これと短いセッション時間は、探している結果を達成する可能性があります。

編集:投稿したコードmysql_*には、ルートユーザーとデータベースにアクセスするためのパスワードなしで、古い機能も表示されます。そのユーザーをプレースホルダーとして挿入したことを教えてください。第二に、PDO または mysqli に移行して、最初に来たユーザーが Web サイトを混乱させないようにしてください。

$_POST「bob; drop table users;」というユーザー名を含むデータをチェックしていません。つまり、私はそれを入れることができ、あなたのウェブサイトはkaputです。Google SQL インジェクション、コードを修正してください。たった今。真剣に。

編集 2: Adnan が指摘しているように、Cookie の有効期限を設定し0て、セッションが開いている間だけ保持することができます。一般的に、Cookie にユーザー名を保持することは素晴らしいことだと思いますが、パスワードをユーザーが入力できるようにしておくことは、セキュリティ上、このアプローチを取ることもできます。

編集 3: コードに基づいて:

<?php 
    $page="logout"; 
    $security=true; 
    session_start(); 
    if (!isset($_SESSION['EXPIRES']) || $_SESSION['EXPIRES'] < time()+3600) 
    { 
        session_destroy(); 
        $_SESSION = array(); 
    } 
    $_SESSION['EXPIRES'] = time() + 3600; 
    header("location: login_admin.php"); 
?> 

次の行に沿ってセッション変数を設定しないのはなぜですか。

$_SESSION['isAdmin']=true;

管理機能にログインしたとき、管理機能からログアウトしたときのように変更しfalseますか? セッション全体を強制終了する必要はありません。セッションに保持されている単一の変数を変更するだけです。

于 2012-08-12T12:39:59.827 に答える
-1

JavaScript のアンロード イベントをトリガーとして使用して、PHP コードにポストバックすることができます。

http://api.jquery.com/unload/

于 2012-08-12T12:48:35.363 に答える