Доброе время суток. В данный момент реализую один крупный портал. Первое время все работало достаточно сносно. Однако некоторые пользователи стали жаловаться на то, что у них нет некоторых привелегий (они у меня хранятся в БД и сессиях). В БД эти привелегии были прописаны. Взял и вывел в админки массив сессий. У меня и остальных пользователей этот массив был заполнен. У них же он был пустой. В чем может быть проблема? Сессии у меня очищаются только при нажатии на кнопку выход... Покажу вам пример кода, безо всяких фич тип безопасности и т.д, т.к получится достаточно громоздко Структура: enter.php (не фрейм) код: PHP: <?php session_start(); $_SESSION['login'] = $_POST ['login']; header ("Location: game.php"); ?> game.php (тут выводятся фреймы) PHP: <?php session_start(); $login = $_SESSION ['login']; ... /* html структура фреймов */ ?> top.php (один из фреймов) PHP: <?php session_start(); print_r ($_SESSION); // абсолютно у всех выводит нормально! ?> chat.php (нижний фрейм) PHP: <?php session_start(); print_r ($_SESSION); // у 90% выводится, у остальных нет. ?> pinfo.php PHP: <?php session_start(); print_r ($_SESSION); // аналогично. 90% показывается, 10% нет. ?> В чем конкретно может быть проблема... Я просто уже не знаю. Ведь сессии хранятся на сервере и вроде не должны зависеть от настроек ПО пользователя.
Горбунов Олег спасибо большое. Действительно, с отключенными cookie в Opera он меня на сайт пропустил и когда я хотел открыть файл pinfo.php у меня вывелся Array ( ). Но это не решило проблему в IE. Поддержку Cookie отключил, но файл все равно показывает Array ( [...] => ...). Уровень безопасности также стоит на минимальном уровне
Все, разобрался в чем проблема. Однако, я не знаю как ее решить грамотно. Собственно, поставил в файлах top.php и pinfo.php код: PHP: <?php echo "Request: "; print_r ($_REQUEST); echo "<br>Sessions: "; print_r ($_SESSION); echo "<br>Cookies: "; print_r ($_COOKIE); ?> У меня на обеих страницах он вывел абсолютно одинаковый код. А у некоторых получилось вот такое: Т.е для одного посетителя создались 2 разные сессии. Подскажите, пожалуйста, как можно это исправить?
Убедись что нет проблем со сторонними библиотеками, которые могут использовать сессии. У самого был недавно похожий случай с simpledb
Даст ли мне что-нибудь session_name? session_name ("MySession"); session_start(); И далее уже везде где есть session_start юзать сначала session_name ("MySession") ?
Вообщем, насколько я понял, лучшим выходом будет написать свой обработчик сессий. Тему можно закрыть, если нет предложений
Хм. а проблема не может быть из-за того, что у Вас фреймы, в КАЖДОМ из которых Вы пишете session_start? Может эту фразу писать только в основной странице? Потому что вот этот вывод: как раз и говорит о том, что у человека получилось ДВЕ сессии одновременно.
Ну да. Я просто не работал с фреймами, не могу сказать точно. Но мне кажется, что, если разобраться, откуда берутся два разных PHPSESSID, то проблема будет понятна.