Теперь это что-то,
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-single-entry-point/ там могут быть лучшие.
Еще лучше было бы переключиться на инфраструктуру MVC (которая включает в себя философию единой точки входа), но поскольку кривая обучения более крута, по крайней мере, начните с одной точки входа.
============ Снова добавьте больше информации ============================= ============
Тогда хорошим вариантом будет повторить эту проблему снова, но вне контекста проекта, взять как можно меньше кода из проекта в новых созданных файлах и попытаться снова создать проблему. сделайте это как можно проще, просто попробуйте снова создать ошибку