0

インターネットとスタック オーバーフローで問題を調べようとしましたが、問題を解決する答えが見つかりませんでした。オープンソース プロジェクト用に作成している 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");
?>
4

1 に答える 1