У меня есть веб-сайт, который использует переменные сеанса (в PHP), чтобы узнать, входит ли посетитель на сайт или нет. Если он новенький, то перенаправляю на обнаруженный язык. Но если он не новичок, отпустите его, куда он хочет (даже страницы на других языках).
Проблема в том, что переменная, используемая для этого ($ _SESSION ["knownvisitor"]), не является постоянной. Я тестировал тот же веб-сайт на другом сервере, и он работает нормально, поэтому я почти уверен, что это проблема конфигурации сеанса. Проблемный сервер - это Ubuntu Server 12.04.4 с Apache 2.2.22 и PHP 5.3.10.
Сессии хранятся в "/ var / lib / php5", и я вижу файлы там, но они пусты. Файлы сеанса принадлежат "www-data" и имеют следующие права "-rw -------". С другой стороны, каталог принадлежит «root» и имеет эти права «drwx-wx-wt».
Я пробовал использовать "session_write_close ()" перед перенаправлением, как рекомендовано на некоторых форумах, но безуспешно. Перенаправление похоже на «заголовок ('Местоположение: [URL]')».
Вот код скрипта, чтобы вы могли понять его основное поведение. Вот что я помещаю в начало всех файлов в своей сети:
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);
}
Вы сказали, что /var/lib/php5/session
принадлежит root
и имеет разрешения drwx-wx-wt
. Это означает, что все пользователи могут записывать в каталог, но только root может читать. В результате PHP может создавать файлы сеансов, но не может вернуться и прочитать их позже. Похоже, именно поэтому ваши сеансы терпят неудачу.
Исправьте право собственности и разрешения, чтобы www-data
может читать и писать (rwx
). Например:
chgrp www-data /var/lib/php5/session
chmod g+rwx /var/lib/php5/session