これは私のスクリプトです:
<?php
// If the user is logged in, delete the session vars to log them out
session_start();
if (isset($_SESSION['user_id'])) {
// Delete the session vars by clearing the $_SESSION array
$_SESSION = array();
// Delete the session cookie by setting its expiration to an hour ago (3600)
if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time() - 3600); }
// Destroy the session
session_destroy();
}
// Delete the user ID and username cookies by setting their expirations to an hour ago (3600)
setcookie('user_id', '', time() - 3600);
setcookie('username', '', time() - 3600);
// Redirect to the home page
$home_url = 'http://' . $_SERVER['HTTP_Host'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
header('Location: ' . $home_url);
?>
サイトにログインするとログアウトできません。本当にCookieのログインが必要ですか、それとも削除できますか?
より簡単なアプローチを試して、すべてのセッションCookieを破棄してください
session_start();
session_destroy();
$home_url = 'http://' . $_SERVER['HTTP_Host'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
header('Location: ' . $home_url);
この方法を使用することをお勧めします、
<?php
//User session in ['user']
if($_SESSION['user_id']){
session_start();
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
}
?>
その方法を使用することをお勧めします、なぜですか? PHPのセッションのtrue destroy
、delete cookie in browser
およびnew set ID of session
を使用するメソッドだからです
「ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッションIDも設定解除する必要があります。Cookieを使用してセッションIDを伝播する場合(デフォルトの動作)、セッションCookieを削除する必要があります。setcookie()そのために使用される可能性があります。」参照: http://us1.php.net/session_destroy および: http://us1.php.net/manual/en/function.session-id.php 「注意$ _SESSION全体をunset($ _ SESSION)で設定解除しないでください。これにより、$ _SESSIONスーパーグローバルを介したセッション変数の登録が無効になります。」参照: http://us2.php.net/manual/en/function.session-unset.php