web-dev-qa-db-ja.com

PHP5 / Apache2 / Ubuntu12でセッション変数が持続しない

セッション変数(PHP)を使用して、訪問者がWebサイトにアクセスしているかどうかを知るWebサイトがあります。彼が新しい場合、私は彼を検出された言語にリダイレクトします。しかし、彼が新しくない場合は、彼がやりたい場所に(他の言語のページも含めて)彼を行かせます。

問題は、これを達成するために使用される変数($ _SESSION ["knownvisitor"])が永続的ではないことです。他のサーバーで同じWebサイトをテストしましたが、問題なく動作するため、セッション構成の問題であると確信しています。問題のあるサーバーは、Apache 2.2.22およびPHP 5.3.10がインストールされたUbuntuサーバー12.04.4です。

セッションは "/ var/lib/php5"に保存されており、ファイルは表示されますが、空です。セッションファイルは「www-data」に属し、「-rw -------」の権限があります。一方、ディレクトリは「root」に属し、これらの権限「drwx-wx-wt」を持っています。

一部のフォーラムで推奨されているように、リダイレクトする前に「session_write_close()」を使用してみましたが、うまくいきませんでした。リダイレクトは「header( 'Location:[URL]')」のようなものです。

スクリプトの基本的な動作を理解できるように、スクリプトのコードを次に示します。これは、Web内のすべてのファイルの先頭に置いたものです。

function detectedlang($availlangs)
{
 // FUNCTION STUFF HERE TO FIND OUT WHICH IS THE LANGUAGE OF THE VISITOR
 return $detectedlang;
}

session_start();

if (!isset($_SESSION["knownvisitor"]))
{
 $detectedlang = detectedlang(array("en", "es"));
 $_SESSION["knownvisitor"] = true;
 header("Location: http://www.mysite.com/".$detectedlang);
}
5
Diego

/var/lib/php5/sessionrootが所有し、drwx-wx-wtの権限を持っているとのことですが、これは、すべてのユーザーがディレクトリにwriteできるが、rootだけがreadできることを意味します。その結果、PHPはセッションファイルを作成できますが、後で戻ってそれらを読み取ることはできません。これが、セッションが失敗した理由であると思われます。

所有権と権限を修正して、www-dataが読み取りと書き込みの両方を行えるようにします(rwx)。例えば:

chgrp www-data /var/lib/php5/session
chmod g+rwx /var/lib/php5/session
4
Michael Hampton