/** 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を提案した場合、ログアウトコードが実行されます
「投稿」リクエストでのみログアウトします。 – Federkun
@Federkunは正しく発音しません。つまり、私のログアウトボタンのためのフォームを持っていなければならないということです。
– shnisakaユーザーは単にどこかで '
'を追加するだけで他のユーザーをログアウトできるようになります。少なくとも、クエリ文字列に 'csrf/token'を追加してください。 –
Federkun