Переменные сеанса, недоступные в подкаталоге

Когда мы переместили наш проект с бета-тестового сервера на наш живой сервер, мы испытали следующее:

Переменные сеанса доступны только в том случае, если доступ к ним файлов находится в той же папке, что и файл, который их создал. На нашем бета-сервере это было не так. Поэтому я создал три очень простых тестовых файла:

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)

и посмотреть, все ли пошло не так.