Когда мы переместили наш проект с бета-тестового сервера на наш живой сервер, мы испытали следующее:
Переменные сеанса доступны только в том случае, если доступ к ним файлов находится в той же папке, что и файл, который их создал. На нашем бета-сервере это было не так. Поэтому я создал три очень простых тестовых файла:
test.php
<?php session_id("581186accf44d7e80df40d0b5a47fb7d"); session_start(); $_SESSION['myvariable'] = 'Hello World'; ?> <html> <body> <p><a href="page2.php">Same folder test</a></p> <p><a href="test/page2.php">Subfolder test</a></p> </body> </html>
Затем мы дублируем следующий файл в той же папке и в папке test /.
page2.php
<?php session_start(); print 'Here is page two, my session variable and my session cookie: '; print $_SESSION['myvariable']; print $_COOKIE['PHPSESSID']; exit; ?>
и вот результаты: page2.php
Here is page two, my session variable and my session cookie: Hello World581186accf44d7e80df40d0b5a47fb7d
Тест / page2.php
Here is page two, my session variable and my session cookie: 581186accf44d7e80df40d0b5a47fb7d
Как вы можете видеть, переменная сеанса исчезла. Но cookie идентификатора сеанса сохраняется в подкаталоге, поэтому это не проблема с файлами cookie.
Я просмотрел блок сеанса в phpinfo (); и за исключением session.save_path, который установлен на бета-сервере, но не на реальном сервере (который предположительно означает, что он по умолчанию равен / tmp), конфигурация идентична для обоих.
Кроме того, у нас нет файла .htaccess, который может изменить пути domain.com на пути www.domain.com.
Поскольку этот тест работает на нашем бета-сервере, я пришел к выводу, что это проблема конфигурации php, но если кто-то может указать мне на параметр, который нуждается в изменении, это было бы высоко оценено!
Хорошо, похоже, что эта проблема возникла частично из-за того, что я не понял, что сделает мой собственный php.ini в папке public_html. Поскольку мы не можем использовать ini_set () на нашем общем сервере (он отключен), я создал локальную копию php.ini, которая содержала следующие строки, чтобы переопределить настройки по умолчанию dud …
date.timezone = Australia/Melbourne magic_quotes_gpc = Off
Я предположил, что значения в этой локальной версии php.ini просто переопределяют значения в master php.ini.
К сожалению, это не то, что происходит на хосте Jumba / UberGlobal. Создание этого локального php.ini означало, что вся конфигурация вернулась к значениям по умолчанию, за исключением этих двух параметров.
Решение было для технологии от Jumba / Uberglobal, чтобы сделать копию своего файла php.ini (только с указанными выше двумя значениями) и поместить его в нашу папку public_html.
Это устранило проблему.
Спасибо всем за помощь!
Это не должно произойти … но нормально. Вы можете попробовать одно, создать файл в корне и включить его во все файлы. Таким образом, вы можете запустить session_start в этом общем файле.
/common.php /file1.php (include common.php) /test/file2.php (include ../common.php - check paths and such)
и посмотреть, все ли пошло не так.