Вопросец по ООП скорее

Discussion in 'PHP' started by bxN5, 20 Jun 2010.

  1. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    Вообщем есть класс который помогает хранить сессию в БД.
    Есть файл 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.
    почему так? и как мне вернуть значение сессии в индекс? или с базы считывать?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    bxN5 внимательно читать что такое суперглобальные массивы. И где здесь ООП? Еще могу заметить, что объявляете некую переменную $session, к которой нигде больше не обращаетесь, во всяком случае в данных кусках кода
     
    _________________________
  3. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    А вариантов может быть вагон и маленькая тележка:
    - нерабочий session_handler
    - рабочий, но неправильно настроенный session_handler (не подключается к базе, не записывает данные, etc)
    - неверная структура базы (не создана таблица для сессий, не хватает полономочий для записи в таблицу)
    - или еще что-нить неявное.

    Итого:
    - проверять ошибки коннектора БД на разных этапах работы,
    - проверять возвращаемое значение session_set_save_handler()
    - отлаживать работу объекта класса dbsession
    - зачитываться содержимым error.log

    Сколько маны не читай, а ловить логические баги от этого проще не станет.

    А я могу заметить, что вы даже не потрудились понять, что делает человек, для чего этот объект нужен, и как оно должно работать при правильной реализации.
     
    #3 Helios, 20 Jun 2010
    Last edited: 20 Jun 2010
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Helios привет, троль, при правильной настройке - все должно работать так, как работает у ТС - управляя местом хранения мы никак не меняем самой сути - некие данные, которые сохраняются при переподключении клиентской машины. А уж тем более - сессионные данные не должны вдруг пропадать, когда мы инклудим некий модуль.

    А все ваши советы не выдерживают и легкой критики - если бы данные не сохранялись print_r не должен был бы их выводить
     
    _________________________
    1 person likes this.
  5. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    т.е данные которые я присваиваю ($_SESSION["auth"] = true;
    $_SESSION["uid"] = $result; ) и не должны передаваться в index.php?
    т.е при print_r($_SESSION); в index.php я не должен получать данные которые я присваивал в модуле?
     
  6. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Позлравляю, понять баг - уже половина его решения. Суть в том, что session handler не сохраняет и/или не считывает впоследствии сессионные данные и не заносит их в суперглобальный массив $_SESSION. В результате и получается ситуация, когда в $_SESSION хранятся только те переменные, которые мы внесли туда в этом сеансе, но нет тех, которые должны были остаться с прошлого. Вывод один - неправильно работает session handler. Куда смотреть, чтобы определить почему - я написал выше.

    Должны, но неправильно работает session handler, реализованный в классе dbsession, поэтому данные и не сохраняются.

    Уж извини, если мой пост показался тролизмом, но он как бы намекает, что некоторым личностям на этом форуме пора бы поубавить свой пафос, спуститься с небес на землю и нормально отвечать на задаваемые вопросы, особенно когда им ответить по сути нечего.
     
    1 person likes this.
  7. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    ну собственно вот класс
    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 даже если в модуле вообще не трогаю сессию
     
    #7 bxN5, 21 Jun 2010
    Last edited: 21 Jun 2010
  8. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Судя по всему, в настройках PHP прописан автоматический запуск сессии. А установить пользовательский session_handler при уже активной сессии невозможно. Поэтому этот параметр нужно выключить.
    Для этого в .htaccess нужно прописать:
    Code:
    php_value session.auto_start off
    
     
  9. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    Добавил +
    в пхп.ини
    session.auto_start = 0
    все равно тоже самое:(
    может кто посоветует рабочий класс?
     
  10. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Другой код найти не проблема, но у тебя и тот код, похоже, рабочий. А не работает все потому, что при создании объекта класса dbsession сессия уже запущена.

    Ты где-нибуть в коде не запускал ее вручную до создания этого объекта?
    PS: Для проверки попробуй использовать этот файлик. Код корявый, но рабочий 100%. Структура таблицы описана в комментарии вверху файла, там же параметры для коннекта к базе.
     
  11. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    варнинг убрал, проблема осталась(

    о а с твоим кодом все работает корректно
     
    #11 bxN5, 22 Jun 2010
    Last edited: 22 Jun 2010
  12. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Если он тебя устраивает - используй на здоровье.