Web サイトのページを閲覧するときに php セッションが保存されないのはなぜですか?
単純なユーザー名とパスワードのペアを使用して、管理者がログイン ページで自分自身を認証できるようにする Web サイトを作成しています。これを行うには、まずユーザーがホームページにアクセスしたときにセッションが作成され、次にログイン ボタンをクリックすると、ユーザー名とパスワードを入力するフォームにリダイレクトされ、そのフォームが POST メソッドを介して別のフォームに送信されます。ユーザー名とパスワードを確認するには ページが有効な場合は、ログインしている管理者ユーザー名を含む変数をセッションに配置し、管理者ダッシュボードにリダイレクトして、その変数が実際にページの管理者であるかどうかを確認するように設定されていることを確認します。
タイトルで説明したように、主な問題は、ホームページをテストするとセッションが作成されるのですが、ログイン フォームへのリンクをクリックすると、何かを削除または無力化したにもかかわらず、セッションが破棄されたように見えることです。そうするよう指示される可能性があります。
ホームページでセッションを開始するための小さな php スニペット (main.php)
リーリー上記のように Cookie ライフサイクルをオーバーライドして、この質問に対する回答のスニペットを取得して、フォルダーが書き込み可能かどうか、およびセッションが作成されたかどうかを確認してみました。 ログは常にホームページに戻ります:
リーリー(最初の行 | その後の数字は予想されるタイムスタンプです)。
ログインフォーム内の唯一の php コードスニペット (connexion.php)
リーリー最初の if there を設定したのは、ログインしている管理者がすでに接続されている場合にダッシュボードに直接リダイレクトされるためです。その後の行は main.php と同じテストを実行しますが、今回はログに返されます:
リーリーこれは、セッションが破棄され、そのすべての変数が設定されていないことを示します。
セッションの使用に関連して提供されたユーザー名とパスワードをチェックするための PHP ファイル (auth.php) 内のコードの一部
リーリーフォーム送信後にファイルを実行すると返されるログ:
リーリー登録した管理者の資格情報をフォームに入力したため、認証自体は成功しますが、クリックしてログインフォームにアクセスすると、ホームページで作成されたセッションが削除されたままであることが判明し、ユーザー名を入力できません$_SESSION 配列にログインしている管理者。
構造により、権限のないユーザーが管理者専用のダッシュボード コンテンツ (dashboard.php) にアクセスできないようにする場合
リーリー私のサーバー (php 8.1.0) で使用されている PHP コンポーネントの 2 つの構成ファイルからの抜粋
#php.ini-開発 リーリー
php.ini-production リーリー
session.save_path パラメータは両方ともコメント化されていないようです。ただし、これは session_save_path() 関数によって返されるパスではありません。
https://www.php.net/manual/en /function.session-start.php
新しいページがロードされるたびに、それは異なる HTTP リクエストになります。セッションは HTTP リクエストごとに開始する必要があるため、すべてのページに
session_start()
を追加する必要があります。すべてのページに含まれる単一のヘッダー ファイルを作成することをお勧めします。これは、ユーザーがログインしていない場合にログイン画面にリダイレクトするなど、すべてのページで必要なその他の設定にも役立ちます。