потеря переменной php session

Я работаю с php5 и apache2 на моей машине разработки. Производственный сервер, по-видимому, схож.

У меня есть скрипт set_language.php, который создает переменную сеанса в соответствии с выбранным языком:

<?php session_start(); $back = $_SERVER['HTTP_REFERER']; if (isset($_GET['lang'])) { if ($_GET['lang'] == 'fr') $_SESSION['lang'] = 'fr'; else if ($_GET['lang'] == 'en') $_SESSION['lang'] = 'en'; } header( "Location: $back" ) ; exit(); ?> 

Затем я включаю код ниже на всех страницах:

 session_start(); if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'en') { require('lang_en.php'); } else if(isset($_SESSION['lang']) && $_SESSION['lang'] == 'fr') { require('lang_fr.php'); } 

Чем я могу получить языковые переменные с:

 echo $lang[sometexttotranslate]; 

На сервере разработки он работает так, как ожидалось. Я нажимаю ссылку, чтобы установить язык, и мои переменные сеанса содержат lang = en или fr

На производственном сервере:

$ _SESSION ['lang'] = dn или dr (должно быть en или fr)

echo $ lang [sometexttotranslate] = d (должен быть переведенный текст)

Любая идея, откуда «d»?

Это не проблема redirection / header / session_start ().


print_r ($ _ SESSION) при первой загрузке:

Массив ([lang] => fr)

print_r ($ _ SESSION) после щелчка по английской ссылке (set_lang.php выше):

Массив ([lang] => dn)

print_r ($ _ SESSION) после щелчка по французской ссылке (set_lang.php выше):

Массив ([lang] => dr)

print_r ($ _ SESSION) после входа в систему:

Массив ([lang] => dr [valid] => 1 [pseudo] => GYC [uid] => 3)

Solutions Collecting From Web of "потеря переменной php session"

Теперь это что-то,

 print_r($_SESSION) after a click on the english link (set_lang.php above): Array ( [lang] => dn ) 

ваша проблема начинается здесь, в set_lang.php. Возможно, сеанс запускается из файла, который включен, и этого не должно произойти!

Если set_lang не включен, убедитесь, что существует start_session, также добавьте print_r, вы также можете сравнить идентификаторы сеанса:

скажем, это index.php

 <?php session_start(); ?> <a href='set_lang.php?sess=<?PHP echo session_id();?>'>lang</a> 

и этот set_lang.php

 <?PHP session_start(); echo 'this is session id from index.php: ',$_GET['sess'], 'and this is session id in set_lang.php:',session_id(), 'and this is the print_r:<br><pre>'; print_r($_SESSION); ?> 

вы должны увидеть тот же идентификатор сеанса.

Но, хотя все это может вам помочь, я сделаю еще один шаг, использую единую точку входа, не вызывайте скрипт php прямо так

 <a href=somescript.php>link</a> 

(если вы не делаете какой-либо ajax), вместо этого вы всегда вызываете некоторый скрипт php через index.php следующим образом:

 <a href=index.php?target=somescript.php>link</a> 

Таким образом, вы ставите сеанс только один раз в index.php, проверка входа также может быть выполнена в index.php.

======================= Править Дополнительная информация Добавлена ​​======================= ================== Быстрый поиск в Google .. нашел этот небольшой учебник для одной записи http://www.renownedmedia.com/blog/php-navigation-system-using- точка с одним входом / могут быть лучшие.

Еще лучше было бы переключиться на структуру mvc (включая философию единой точки входа), но поскольку кривая обучения более крутая, по крайней мере, начинается с единственной точки входа.

============ ReEdit снова добавлена ​​дополнительная информация ================================= ========= Хорошим вариантом было бы повторить эту проблему снова, но из контекста вашего проекта возьмите как можно меньше кода из вашего проекта в новых созданных файлах и попытайтесь снова создать проблему. держите его как можно проще, просто попробуйте снова создать ошибку