За последние 24 часа нас посетили 17733 программиста и 1608 роботов. Сейчас ищут 1067 программистов ...

Проблема в сессиях

Тема в разделе "PHP для новичков", создана пользователем Elkaz, 21 ноя 2007.

  1. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Доброе время суток. В данный момент реализую один крупный портал. Первое время все работало достаточно сносно. Однако некоторые пользователи стали жаловаться на то, что у них нет некоторых привелегий (они у меня хранятся в БД и сессиях). В БД эти привелегии были прописаны. Взял и вывел в админки массив сессий. У меня и остальных пользователей этот массив был заполнен. У них же он был пустой. В чем может быть проблема? Сессии у меня очищаются только при нажатии на кнопку выход...
    Покажу вам пример кода, безо всяких фич тип безопасности и т.д, т.к получится достаточно громоздко :)
    Структура:
    enter.php (не фрейм)
    код:
    PHP:
    1.  
    2. <?php
    3. $_SESSION['login'] = $_POST ['login'];
    4. header ("Location: game.php");
    5. ?>
    6.  
    game.php (тут выводятся фреймы)
    PHP:
    1.  
    2. <?php
    3. $login = $_SESSION ['login'];
    4. ...
    5. /* html структура фреймов */
    6. ?>
    7.  
    top.php (один из фреймов)
    PHP:
    1.  
    2. <?php
    3. print_r ($_SESSION); // абсолютно у всех выводит нормально!
    4. ?>
    5.  
    chat.php (нижний фрейм)
    PHP:
    1.  
    2. <?php
    3. print_r ($_SESSION); // у 90% выводится, у остальных нет.
    4. ?>
    5.  
    pinfo.php
    PHP:
    1.  
    2. <?php
    3. print_r ($_SESSION); // аналогично. 90% показывается, 10% нет.
    4. ?>
    5.  
    В чем конкретно может быть проблема... Я просто уже не знаю. Ведь сессии хранятся на сервере и вроде не должны зависеть от настроек ПО пользователя.
     
  2. Anonymous

    Anonymous Guest

    Сами сессии - да. А вот session_id хранится у пользователя в куках по дефолту.
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Горбунов Олег спасибо большое. Действительно, с отключенными cookie в Opera он меня на сайт пропустил и когда я хотел открыть файл pinfo.php у меня вывелся Array ( ). Но это не решило проблему в IE. Поддержку Cookie отключил, но файл все равно показывает Array ( [...] => ...).
    Уровень безопасности также стоит на минимальном уровне :)
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Поставили тому пользователю оперу и врубили поддержку куков. Проблема все еще осталась...
     
  5. Anonymous

    Anonymous Guest

    Elkaz, прокси, брендмауеры, файрволлы.... et cetera...
     
  6. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Все, разобрался в чем проблема. Однако, я не знаю как ее решить грамотно. Собственно, поставил в файлах top.php и pinfo.php код:
    PHP:
    1.  
    2. <?php
    3. echo "Request: ";
    4. print_r ($_REQUEST);
    5. echo "<br>Sessions: ";
    6. print_r ($_SESSION);
    7. echo "<br>Cookies: ";
    8. print_r ($_COOKIE);
    9. ?>
    10.  
    У меня на обеих страницах он вывел абсолютно одинаковый код. А у некоторых получилось вот такое:
    Т.е для одного посетителя создались 2 разные сессии. Подскажите, пожалуйста, как можно это исправить?
     
  7. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Elkaz
    1 - Используеш simpledb ?
    2 - везде храниш сессии в default директорию ?
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    1. Нет
    2. Директория tmp/ (default)
     
  9. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Убедись что нет проблем со сторонними библиотеками, которые могут использовать сессии. У самого был недавно похожий случай с simpledb :p
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Сторонних библиотек нет.
    Есть еще какие-нибудь предположения? :(
     
  11. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Даст ли мне что-нибудь session_name?
    session_name ("MySession");
    session_start();

    И далее уже везде где есть session_start юзать сначала
    session_name ("MySession") ?
     
  12. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Вообщем, насколько я понял, лучшим выходом будет написать свой обработчик сессий.
    Тему можно закрыть, если нет предложений
     
  13. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Хм. а проблема не может быть из-за того, что у Вас фреймы, в КАЖДОМ из которых Вы пишете session_start? Может эту фразу писать только в основной странице?
    Потому что вот этот вывод:
    как раз и говорит о том, что у человека получилось ДВЕ сессии одновременно.
     
  14. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Основной страницой называете ту, где находится структура фреймов? Сессия тогда вроде не доходит :)
     
  15. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Ну да. Я просто не работал с фреймами, не могу сказать точно.
    Но мне кажется, что, если разобраться, откуда берутся два разных PHPSESSID, то проблема будет понятна.