web-dev-qa-db-ja.com

ログアウトPHPスクリプト

これは私のスクリプトです:

<?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のログインが必要ですか、それとも削除できますか?

5
user2544765

より簡単なアプローチを試して、すべてのセッションCookieを破棄してください

session_start();
session_destroy();
$home_url = 'http://' . $_SERVER['HTTP_Host'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
header('Location: ' . $home_url);
15
Adam Brown

この方法を使用することをお勧めします、

<?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 destroydelete 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

0
steve