私は昨日これを調査してトラブルシューティングするために約45分を費やしたので、誰かが私が試すことができる別のアイデアを持っていることを願っています。
PHPスクリプトの1つがセッション$_SESSION
が空であることを検出したことから始まり、残りの実行を停止してエラーをスローしました。
このプロジェクト全体は、少なくとも半年間問題なくそのサーバーで動作しており、それ以降、コードやサーバーの更新は行われていません。
そのとき私がしたことは次のとおりです。テスト用に新しいPHPファイルを作成し、コンテナーの前後に何もないことを確認して、次の<?php ?>
コードを記述しました。
session_start();
var_dump($_SESSION);
$_SESSION['test'] = 5;
次に、ファイルを単独で繰り返し実行すると、常に空のセッションが発生しました。
以前にこれに遭遇したことがあるので、サーバー上でセッションファイルが配置されているフォルダー(私の場合/var/lib/php5
)をチェックし、正しいディレクトリ所有者とアクセス許可があることを確認し、その中のすべてのファイルを削除して、apacheを再起動しました。サイコロなし...
ファイルを数回再度実行すると、実行ごとに新しいセッションファイルが作成され、セッションファイルにはtest = 5エントリが含まれていたため、セッションは正しく書き込まれます。
そこで、ブラウザのCookieを確認しました。それらはそこにあり、私が知る限り機能しています-phpsessidcookieと私のサイトが作成する別のcookieの両方がそこにありました。すべてのCookieを削除してからテストファイルを再実行すると、phpsessid
Cookieは通常どおり再作成され、セッションファイルとして作成されたものと同じセッションIDが含まれます。
var_dump(session_id());
また、直後にコードを追加するsession_start();
と、スクリプトが実行されるたびにまったく新しいセッションIDが得られました。
まだサポートされていないPHPバージョンを実行しているsession_status()
ので、それもオプションではありません(とにかく、私はここでかなり盲目的に飛んでいます)。
したがって、セッションが適切に作成され、ファイルにデータが含まれ、Cookieに正しいIDが含まれていることがわかります。
私の知る限り、問題はブラウザがCookieデータをサーバーに返送しないか、サーバーがCookieからのセッションIDを既存のセッションとして認識しないことにあるはずです。
私がこれをテストしている間、Firefoxはアップデートをインストールしたかったので、アップデートを実行しましたが、変更はありませんでした。FirefoxはCookieを受信するように設定されていますが、Cookieを妨げるような例外セットはどこにも見つかりませんでした。
これが6か月以上正常に機能していることを考えると、なんらかの異常な事故によって何かが破損したに違いありませんが、Linuxや、PHPとセッションの内部動作については、どこから診断を開始するかさえわかりません。
ある時点でsession_write_close()
、何も変わらないことを試みました(そして、私のプロジェクト全体は、それがなくても常に正常に機能しています)。
うまくいったのはこれだけでした:
$c = $_COOKIE['phpsessid'];
session_name($c);
session_start();
var_dump($_SESSION);
$_SESSION['test'] = 5;
しかし、私session_start
は大量のページを使用しており、そもそも必要のないコードを入力するためにそれらすべてを調べたくありません...
何かご意見は?
前もって感謝します!
- - 編集 - -
もう一度問題をチェックインしましたが、Cookie名がではphpsessid
なくPHPSESSID
(指摘してくれてありがとう、@ Cobra_Fast)であることが確認できたので、問題の原因に近づいています。の値を引用符で囲むためにphp.ini
ファイルに移動しsession.name
、apacheを再起動しましたが、変更はありません。Cookie名はまだ小文字です。コンピューターでウイルス対策プログラムが見つかりませんでした。これを実行できるネットワークセキュリティがあるとは思えません...@Cobra_Fastが提案したようにPHP設定が破損している場合、これをどのように修正できますか?今すぐファイルを編集しても役に立ちませんでした...