Когда мы переместили наш проект с сервера бета-тестирования на наш работающий сервер, мы столкнулись со следующим:
Переменные сеанса доступны только в том случае, если файл, к которому они обращаются, находится в той же папке, что и файл, который их создал. На нашем бета-сервере этого не произошло. Итак, я создал три очень простых тестовых файла:
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 просто переопределят значения в главном php.ini.
К сожалению, этого не происходит на хостинге Jumba / UberGlobal.
Создание этого локального php.ini означало, что вся конфигурация вернулась к значениям по умолчанию, за исключением этих двух настроек.
Решение было для технаря из Jumba / Uberglobal сделать копию своего файла php.ini (с изменением только двух вышеуказанных значений) и поместить его в нашу папку public_html.
Это исправило проблему.
Спасибо всем за помощь!
У меня была похожая проблема. Я смог это исправить, убедившись, что копия файла php.ini присутствует в каждом подкаталоге, к которому я хочу получить доступ.
Это не должно происходить… но хорошо Вы можете попробовать одну вещь, создать файл в корне и включить его во все файлы. Таким образом, вы можете запустить session_start в этом общем файле.
/common.php
/file1.php (include common.php)
/test/file2.php (include ../common.php - check paths and such)
и посмотрим, все ли пойдет не так.