Вообщем есть класс который помогает хранить сессию в БД. Есть файл index.php PHP: $session = new dbsession(); $_SESSION["aut"] = true; print_r($_SESSION); дальше идет конструкция которая в зависимости от гет данных подключает модуль сайта (тоже класс) т.е localhost/auth/auth будет соответствовать классу auth и методу auth и так в этом методе я пишу PHP: $_SESSION["auth"] = true; $_SESSION["uid"] = $result; print_r($_SESSION); и когда обновляю страницу то первый print_r мне выводит только значение aut, а второй print_r который в класе авторизации выводит и aut и auth и uid. почему так? и как мне вернуть значение сессии в индекс? или с базы считывать?
bxN5 внимательно читать что такое суперглобальные массивы. И где здесь ООП? Еще могу заметить, что объявляете некую переменную $session, к которой нигде больше не обращаетесь, во всяком случае в данных кусках кода
А вариантов может быть вагон и маленькая тележка: - нерабочий session_handler - рабочий, но неправильно настроенный session_handler (не подключается к базе, не записывает данные, etc) - неверная структура базы (не создана таблица для сессий, не хватает полономочий для записи в таблицу) - или еще что-нить неявное. Итого: - проверять ошибки коннектора БД на разных этапах работы, - проверять возвращаемое значение session_set_save_handler() - отлаживать работу объекта класса dbsession - зачитываться содержимым error.log Сколько маны не читай, а ловить логические баги от этого проще не станет. А я могу заметить, что вы даже не потрудились понять, что делает человек, для чего этот объект нужен, и как оно должно работать при правильной реализации.
Helios привет, троль, при правильной настройке - все должно работать так, как работает у ТС - управляя местом хранения мы никак не меняем самой сути - некие данные, которые сохраняются при переподключении клиентской машины. А уж тем более - сессионные данные не должны вдруг пропадать, когда мы инклудим некий модуль. А все ваши советы не выдерживают и легкой критики - если бы данные не сохранялись print_r не должен был бы их выводить
т.е данные которые я присваиваю ($_SESSION["auth"] = true; $_SESSION["uid"] = $result; ) и не должны передаваться в index.php? т.е при print_r($_SESSION); в index.php я не должен получать данные которые я присваивал в модуле?
Позлравляю, понять баг - уже половина его решения. Суть в том, что session handler не сохраняет и/или не считывает впоследствии сессионные данные и не заносит их в суперглобальный массив $_SESSION. В результате и получается ситуация, когда в $_SESSION хранятся только те переменные, которые мы внесли туда в этом сеансе, но нет тех, которые должны были остаться с прошлого. Вывод один - неправильно работает session handler. Куда смотреть, чтобы определить почему - я написал выше. Должны, но неправильно работает session handler, реализованный в классе dbsession, поэтому данные и не сохраняются. Уж извини, если мой пост показался тролизмом, но он как бы намекает, что некоторым личностям на этом форуме пора бы поубавить свой пафос, спуститься с небес на землю и нормально отвечать на задаваемые вопросы, особенно когда им ответить по сути нечего.
ну собственно вот класс http://www.phpclasses.org/browse/file/15596.html и еще такая вот деталь я получаю варнинг в модуле или где то перед, но после вывода шапки Notice: A session had already been started - ignoring session_start() in Z:\home\test1.ru\www\classes\class.dbsession.php on line 117 даже если в модуле вообще не трогаю сессию
Судя по всему, в настройках PHP прописан автоматический запуск сессии. А установить пользовательский session_handler при уже активной сессии невозможно. Поэтому этот параметр нужно выключить. Для этого в .htaccess нужно прописать: Code: php_value session.auto_start off
Другой код найти не проблема, но у тебя и тот код, похоже, рабочий. А не работает все потому, что при создании объекта класса dbsession сессия уже запущена. Ты где-нибуть в коде не запускал ее вручную до создания этого объекта? PS: Для проверки попробуй использовать этот файлик. Код корявый, но рабочий 100%. Структура таблицы описана в комментарии вверху файла, там же параметры для коннекта к базе.