インターネットとスタック オーバーフローで問題を調べようとしましたが、問題を解決する答えが見つかりませんでした。オープンソース プロジェクト用に作成している Web サイト用のバックエンド システムがあります。オンライン ドメインとデータベースへのすべての転送が完了しました。他の多くの問題を解決した後、ログアウトを除いて、現在は機能しています。
バックエンド ヘッダーには、次の URLがあります。
<a href="logout.php"><h1>Logout</h1></a>
logout.php ページの内容は次のとおりです。
<?php
session_regenerate_id();
session_start();
session_unset();
$_SESSION = array();
session_destroy();
header("Location: login.php");
?>
オフラインで、MAMP 経由で問題なく動作します。ただし、オンラインではセッションが破壊されません。すべてのセッション変数に引き続きアクセスできるため、ログイン状態を維持できます。前に述べたように、答えを探してみましたが、問題を解決する答えが見つからないようです。何が間違っているのか、誰かが手がかりを持っているなら、教えてください。前もって感謝します!
編集: これは、ログインしているかどうかにかかわらず、すべてのバックエンドページをチェックする方法です:
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = false; // Set to true if using https.
$httponly = true; // This stops javascript being able to access the session id.
ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies.
$cookieParams = session_get_cookie_params(); // Gets current cookies params.
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
session_name($session_name); // Sets the session name to the one set above.
session_regenerate_id(true); // regenerated the session, delete the old one.
session_start(); // Start the php session
}
ご覧のとおり、@paulprogrammer、私はクッキーで何かをしています。ログアウト時に確実に破棄するにはどうすればよいですか?
編集 (2):
わかりました ポインタをありがとう paulprogrammer。ログイン チェック関数から Cookie 部分を削除し、次の単純な関数に変更しました。
function sec_session_start() {
session_start();
}
これは Cookie を作成しませんが、動作するようになりました。公式のphp manulが@ http://php.net/manual/en/function.session-destroy.phpと言ったものを介してCookieの設定を解除しようとしましたが、それはできませんでした。そのため、よりシンプルで機能するものに移動しました。私以外にバックエンドを使用する人は多くなく、Cookie がなくても問題なく動作するように見えるので、完了と呼びます。このトピックは閉じることができます:)
最終編集(3):わかりました * @paulprogrammer のおかげで、Cookie でも動作するようになりました。答えがわかったので、そうしなければならないのは当然のことのように思えます。私の愚かな。どうやら、セッションで行ったように、セッションの名前を設定する必要があったようです。私はそれを始める前に、最初にこれを行います。ログイン チェック機能の新しい、更新されたコード:
<?php
session_name('sec_session_id');
session_start();
setcookie(session_name(), '', 100);
session_unset();
session_destroy();
$_SESSION = array();
header("Location: login.php");
?>