За последние 24 часа нас посетили 47624 программиста и 1728 роботов. Сейчас ищут 710 программистов ...

Закрытие сессии

Тема в разделе "Вопросы от блондинок", создана пользователем Kocapb, 13 окт 2008.

  1. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Здравствуйте, осваиваю работу с сессиями. Возникла сразу же проблема:
    • Каким образом сделать так чтобы при закрытии окна браузера сессия закрывалась?
    Открываю сессию так (файл enter.php):
    PHP:
    1.  
    2.    $_SESSION['username'] = $_GET['login'];     //передаю из index.php
    3.    $_SESSION['password'] = $_GET['password'];   //передаю из index.php
    4.  
    Затем при переходах между страницами вызывается файл db.php
    PHP:
    1.  
    2.   $username = $_SESSION['username'];
    3.   $password = $_SESSION['password'];
    4.   mysql_connect('localhost', $username, $password ) or die("Could not connect: " . mysql_error());
    5.   mysql_select_db('pointi-itdb');
    6.  
     
  2. Скажу, если ты обьяснишь, зачем это надо.
     
  3. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Безопасность. Если я обращаюсь к файл через строку в браузере, например http://localhost/point-itdb/query.php то сервак меня спокойно пускает и конектится к базе под тем пользователем который недавно закрыл браузер.
     
  4. да ну?
     
  5. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    не можешь\ не хочешь помогать, не засоряй эфир.
     
  6. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    При закрытии браузера сессия удаляется.
    Но в настройках браузера можно указать что при его открытии использовать предыдущую сессию.
    Например FF спрашивает при закрытии сохранить ли сессию или нет.
    На сайте просто нужно сделать кнопку ВЫХОД, и тыкать в нее после того как работа с сайтом закончена.
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Kocapb
    нам всем действительно очень интересно, как это
    флоппик
    подобрел? :)
     
  8. черт, че это вы все...
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    При закрытии браузера удаляется не сессия, а кусисы в браузере, которые хранят SID'ы. Устаревшая сессия удаляется сборщиком мусора, который вызывается с заданной вероятность.
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Kocapb
    Вльдемар
    Читать http://phpfaq.ru/session
    На сервере сессия живет столько, сколько её приказано, или пока её специально не удалят.
     
  11. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    хмм... возможно из-за топологического нубства, я неверно излагаю мысли. Зайдем с другой стороны.
    файл index.php это вход где пользователь вводит логин и пароль. После нажатия кнопки ок, пользователь переходит на страницу query.php где ему в случае неверного ввода данных сообщается ошибка, либо дается возможность дальнейшего использования ресурсов. Логин и пароль передаются методом GET.
    Все замечательно, но если я произвожу следующие действия.
    В строке браузера напрямую обращаюсь к query.php и он меня пускает. Судя по всему сервер сохраняет данные в массиве $_SESSION. Необходимо сделать так чтобы после закрытии окна браузера данные в $_SESSION уничтожались. Каким способом это можно реализовать? Если только средствами PHP, то какими (код выкладывать необязатьлно, хотя это наилучшее развитие событий), достаточно название механизмов или примерный алгоритм. Если средствами JC то пожалуйста тоже примерное направление "моего копания".
     
  12. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    браузер "с интернетом" работает путем запроса страничек, "интернет" не знает, запущен у тебя браузер или нет, запрос пришел - запрос ушел, все. Делай сессии таким образом, чтобы хранение куков с sid'ом было до закрытия браузера (однако это не значт, что после закрытия сервер узнает, что ты вышел). После нового запуска в браузере будет открыта новая сессия.
     
  13. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    хмм, значит закрытие браузера отловить нельзя.
    А можно ли сессии присвоить имя на входе? и сделать так чтобы это имя удалялось после некоторого времени? и при переходе между страницами читать это имя...
     
  14. GudGuy

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

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    <оффтоп>
    вот мне то же интересно как это реализовано на одноклассниках и иже с ними. хотя отставание чуть-ли не на пол часа бывает...
    </оффтоп>
     
  15. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Сессия сама удалится, если её не дёргать в течении установленного времени.
     
  16. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    хмм ок, а есть ли уязвимые места в этом подходе? я использую только сессии без cookies.
     
  17. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
  18. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Sofia
    спасибо
     
  19. GudGuy

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

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    по лайф тайму понятно, но это не всегда спортивно=)

    а, всё, маленький лайфтайм сесси, и обновление аяксом.
     
  20. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    onUnload, onBeforeUnload и в ту же степь
     
  21. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Оно по умолчанию стоит в нуле. Что означает закрытие сессии после закрытия браузера. Замечу что закрытие, а не удаление.
     
  22. Kocapb

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

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Luge
    хмм во то что надо =) Спасибо
     
  23. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Судя по всему, в query.php нет проверки на авторизованность пользователя, если форма входа не отправлялась.
     
  24. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А почему? По-моему сейчас фактически все разнообразные форумы, фотогаллереи и т.д. используют куки. Просто устанавливается их время жизни 0 (т.е. до закрытия браузера) - и всё. Если клиент обратился к серверу в первый раз (т.е. не передавая никакого идентификатора сиссии), то сервер создаёт новую сессию и отправляет её идентификатор клиенту (в виде куки). При каждом следующем обращении к серверу браузер передаёт серверу этот идентификатор сессии. Сервер проверяет список имеющихся идентификаторов сессий, если переданный клиентом идентификатор имеется - ну соответственно работаем с ним дальше, если нет - сервер создаёт новую сессию. Ну а чтобы не накапливался хлам на сервере - каждая сессия, к которой не было обращений какое-то время (кажется по умолчанию 24 минуты, но можно менять) просто удаляется. В общем примерно так.

    P.S. Сейчас сам мучаюсь с сессиями, никак не пойму что этому php надо... :oops: Уже несколько раз перечитал программку - не могу понять что не так. Программа работает и при чём правильно работает, но на каждой страничке внизу два сообщения Fatal Error... Наверно что-то не так в session_set_save_handler... Сейчас создам об этом темку.
     
  25. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632