2017-07-02 5 views
0
/** LOGOUT PROCESS **/ 
case logout: 
    if(isset($_SESSION['user'])){ 
     unset($_SESSION['user']); 
     if(!empty($_COOKIE['remember'])){ 
      list($selector, $authenticator) = explode(':', $_COOKIE['remember']); 
      $stmt = $db->prepare('DELETE FROM user_token WHERE selector = :selector'); 
      $stmt->execute(['selector' => $selector]); 
     } 
     if(isset($_SERVER['HTTP_COOKIE'])){ 
      $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
      foreach($cookies as $cookie) { 
       $parts = explode('=', $cookie); 
       $name = trim($parts[0]); 
       setcookie($name, '', time()-1000); 
       setcookie($name, '', time()-1000, '/'); 
      } 
     } 
    } 
    header("Location: ".site_url,true,303); 
    exit(); 
    break; 

私は上記のコードを訪問します:example.com/user/logoutこのプロセスを実行します。私がテストしていたときに、私がexample.com/user/loと入力すると、私が訪れた最後のページであるので、example.com/user/logoutに私のブラウザが私に示唆していることに気付きました。それは、私がURLを訪れることなく私をログアウトさせるものです(ブラウザには、私に示唆されていればURLを訪れると推測されます)。私はそれが起こることを望んでいない!私はそれを防ぐためにログアウトを要求する前に、ポップアップアラートを設計することを考えました。私が使用できる他のオプションは何ですか?ページが訪問された場合、ユーザーはすぐにログアウトされません。誰かがログアウトしようとする前にアラートを表示しないウェブサイトを見ました。彼らはバックエンドで何をしていますか?ブラウザがURLを提案した場合、ログアウトコードが実行されます

+0

「投稿」リクエストでのみログアウトします。 – Federkun

+0

@Federkunは正しく発音しません。つまり、私のログアウトボタンのためのフォームを持っていなければならないということです。

shnisaka

+0

ユーザーは単にどこかで ' 'を追加するだけで他のユーザーをログアウトできるようになります。少なくとも、クエリ文字列に 'csrf/token'を追加してください。 – Federkun

答えて

0

postメソッドまたはajaxリクエストを使用することができます。現在、単純なgetメソッドを使用しており、ユーザーがログインしているかどうかを確認するには、単純にユーザーをログアウトします。
1->ログアウト機能のポストリクエストを特定のキーで使用できます。
2>同じようにajaxをページに実装することができます。
任意の方法を選択できます。

関連する問題