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

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

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

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, но если бы кто-то мог указать мне на параметр, который нужно изменить, это было бы очень полезно!

2

Решение

Ладно, похоже, что проблема возникла, отчасти из-за моего непонимания того, что будет делать мой собственный 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.

Это исправило проблему.

Спасибо всем за помощь!

2

Другие решения

У меня была похожая проблема. Я смог это исправить, убедившись, что копия файла php.ini присутствует в каждом подкаталоге, к которому я хочу получить доступ.

1

Это не должно происходить… но хорошо Вы можете попробовать одну вещь, создать файл в корне и включить его во все файлы. Таким образом, вы можете запустить session_start в этом общем файле.

/common.php
/file1.php (include common.php)
/test/file2.php (include ../common.php - check paths and such)

и посмотрим, все ли пойдет не так.

0
По вопросам рекламы [email protected]