PHP がセッションの開始に失敗する理由は次のとおりです。 php.ini のセッションに関連する設定にエラーがあるため、セッション Cookie を送信および保持できません。
トラブルシューティングの手順: 1. phpinfo.php を作成し、ブラウザで開きます。 セッション部分に注目 2. session.cookie_domain はドメイン名 A を設定します。つまり、session.cookie_domain = ドメイン名 A。その結果、ドメイン名 B ではセッション Cookie が無効になります。 解決策 1: php.ini の session.cookie_domain を空に設定します。つまり、 session.cookie_domain = 解決策 2: session.cookie_domain = 使用するドメイン名に設定します 3. php.ini の session.cookie_path 設定が厳密すぎます。たとえば、これを session.cookie_path = /hjaa/ に設定します。これは、ルート ドメイン名の下にある hjaa ディレクトリとサブディレクトリのみがセッションの使用を許可されることを意味します (より正確には、session.cookie_domain が A ドメイン名を設定している場合、セッションの使用は許可されます)。 A ドメイン名の下にある hjaa ディレクトリとサブディレクトリがセッションの使用を許可されていることを意味します) 解決策: php.ini の session.cookie_path を「/」 (二重引用符なし) に設定するか、session.cookie_path = / のように、より緩和されたセキュリティ設定に設定します。 4. php.ini では、session.cookie_path がセッション一時ファイルが保存されるパスであると考えられ、session.cookie_path と session.save_path が混同されています。しかし実際には、session.cookie_path はセッションが有効な Web サイトのドメインを表し、サーバーのファイル権限とは関係ありません。session.save_path はセッションの一時ファイルが保存されるパスです。たとえば、session.cookie_path を session.cookie_path = C:/WINDOWS/TEMP に設定すると、障害が発生します。 5. session.save_path で設定されたディレクトリに書き込み権限がないか、設定が間違っています (設定されたフォルダーが存在しないなど)。注: 空の場合、デフォルトのシステム一時フォルダー パスが使用されます。 Windows は通常「%SystemRoot%TEMP」、Unix は通常「/tmp」です 解決: (1) session.save_path が空白でない場合は、設定値がフォルダに対応しており、そのフォルダが存在することを確認してください。設定方法が本当にわからない場合は、この設定をコメントするか、null 値に変更して PHP がデフォルト設定を使用できるようにしてください。 (2) 対応するディレクトリで、対応するユーザーに書き込み権限を与えます。たとえば、IIS の場合、インターネット ゲスト アカウントに書き込み権限を与える必要があります。 6. session.auto_start = on の場合、session_start() を実行すると新しい session_id が生成されます。 session.auto_start = on の利点は、session_start() の実行を忘れたり、プログラム内の session_start() の場所が間違ったりすることがないことです。欠点は、サードパーティのコードを使用している場合、そのコード内の session_start() をすべて削除する必要があることです。そうしないと正しい結果が得られません 解決: (1) session.auto_start = オフ (2) プログラム内の session_start() を削除します |