Здравствуйте, осваиваю работу с сессиями. Возникла сразу же проблема: Каким образом сделать так чтобы при закрытии окна браузера сессия закрывалась? Открываю сессию так (файл enter.php): PHP: session_start(); $_SESSION['username'] = $_GET['login']; //передаю из index.php $_SESSION['password'] = $_GET['password']; //передаю из index.php Затем при переходах между страницами вызывается файл db.php PHP: session_start(); $username = $_SESSION['username']; $password = $_SESSION['password']; mysql_connect('localhost', $username, $password ) or die("Could not connect: " . mysql_error()); mysql_select_db('pointi-itdb');
Безопасность. Если я обращаюсь к файл через строку в браузере, например http://localhost/point-itdb/query.php то сервак меня спокойно пускает и конектится к базе под тем пользователем который недавно закрыл браузер.
При закрытии браузера сессия удаляется. Но в настройках браузера можно указать что при его открытии использовать предыдущую сессию. Например FF спрашивает при закрытии сохранить ли сессию или нет. На сайте просто нужно сделать кнопку ВЫХОД, и тыкать в нее после того как работа с сайтом закончена.
При закрытии браузера удаляется не сессия, а кусисы в браузере, которые хранят SID'ы. Устаревшая сессия удаляется сборщиком мусора, который вызывается с заданной вероятность.
Kocapb Вльдемар Читать http://phpfaq.ru/session На сервере сессия живет столько, сколько её приказано, или пока её специально не удалят.
хмм... возможно из-за топологического нубства, я неверно излагаю мысли. Зайдем с другой стороны. файл index.php это вход где пользователь вводит логин и пароль. После нажатия кнопки ок, пользователь переходит на страницу query.php где ему в случае неверного ввода данных сообщается ошибка, либо дается возможность дальнейшего использования ресурсов. Логин и пароль передаются методом GET. Все замечательно, но если я произвожу следующие действия. В строке браузера напрямую обращаюсь к query.php и он меня пускает. Судя по всему сервер сохраняет данные в массиве $_SESSION. Необходимо сделать так чтобы после закрытии окна браузера данные в $_SESSION уничтожались. Каким способом это можно реализовать? Если только средствами PHP, то какими (код выкладывать необязатьлно, хотя это наилучшее развитие событий), достаточно название механизмов или примерный алгоритм. Если средствами JC то пожалуйста тоже примерное направление "моего копания".
браузер "с интернетом" работает путем запроса страничек, "интернет" не знает, запущен у тебя браузер или нет, запрос пришел - запрос ушел, все. Делай сессии таким образом, чтобы хранение куков с sid'ом было до закрытия браузера (однако это не значт, что после закрытия сервер узнает, что ты вышел). После нового запуска в браузере будет открыта новая сессия.
хмм, значит закрытие браузера отловить нельзя. А можно ли сессии присвоить имя на входе? и сделать так чтобы это имя удалялось после некоторого времени? и при переходе между страницами читать это имя...
<оффтоп> вот мне то же интересно как это реализовано на одноклассниках и иже с ними. хотя отставание чуть-ли не на пол часа бывает... </оффтоп>
PHP: session_set_cookie_params (0); ini_set('session.cookie_lifetime', 0); вопрос уже возникал, почитай http://php.ru/forum/viewtopic.php?t=1732&highlight=:
по лайф тайму понятно, но это не всегда спортивно=) а, всё, маленький лайфтайм сесси, и обновление аяксом.
Оно по умолчанию стоит в нуле. Что означает закрытие сессии после закрытия браузера. Замечу что закрытие, а не удаление.
Судя по всему, в query.php нет проверки на авторизованность пользователя, если форма входа не отправлялась.
А почему? По-моему сейчас фактически все разнообразные форумы, фотогаллереи и т.д. используют куки. Просто устанавливается их время жизни 0 (т.е. до закрытия браузера) - и всё. Если клиент обратился к серверу в первый раз (т.е. не передавая никакого идентификатора сиссии), то сервер создаёт новую сессию и отправляет её идентификатор клиенту (в виде куки). При каждом следующем обращении к серверу браузер передаёт серверу этот идентификатор сессии. Сервер проверяет список имеющихся идентификаторов сессий, если переданный клиентом идентификатор имеется - ну соответственно работаем с ним дальше, если нет - сервер создаёт новую сессию. Ну а чтобы не накапливался хлам на сервере - каждая сессия, к которой не было обращений какое-то время (кажется по умолчанию 24 минуты, но можно менять) просто удаляется. В общем примерно так. P.S. Сейчас сам мучаюсь с сессиями, никак не пойму что этому php надо... Уже несколько раз перечитал программку - не могу понять что не так. Программа работает и при чём правильно работает, но на каждой страничке внизу два сообщения Fatal Error... Наверно что-то не так в session_set_save_handler... Сейчас создам об этом темку.