Как сбросить сессию в браузере

от admin

Как убивать сессию после закрытия вкладки?

Каким способом можно убивать сессию при закрытии вкладки?

  • Вопрос задан более трёх лет назад
  • 2318 просмотров

Простой 3 комментария

  • Facebook
  • Вконтакте
  • Twitter

miraage

dima9595

Сессия хранится на сервере. Как вариант можно сделать так:
1. У пользователя есть сессия, рассчитанная на N минут.
2. Когда пользователь делает что-то на сайте (переходит по ссылкам, пишет в комментарии и т.п.), т.е. он онлайн, вы обновляете жизнь сессии.
3. Когда пользователь закрывает вкладку, сессия остаётся на сервере. Не забываем про 1-2 пункты.
4. Как только пользователь зашёл снова на сайт через N минут, то проверяем, есть ли время хранения сессии этого пользователя. Если нет, то удаляем сессию. А если же есть, то снова перезаписываем.

Так же, в дополнение, можно добавить CRON. Он чекает сессии, и если время жизни сессии меньше, чем время сейчас+N минут/секунд (пункт 1), то удаляет её. Иначе не трогает.

Как то так. Надеюсь мой ответ подтолкнёт к чему-то большему!

  • Facebook
  • Вконтакте
  • Twitter

dima9595

А на сервере дополнительно обрывать по таймеру.

  • Facebook
  • Вконтакте
  • Twitter

ThunderCat

  • Facebook
  • Вконтакте
  • Twitter

У вас там в тегах php, потому я предположу, что вы о вот этих сессиях.

Ответ: никаким.

PHP не знает что там у пользователя случилось: может он вкладку закрыл, или крышку ноута закрыл, или заехал в тоннель, или у него комп завис, или интернет отключили за неуплату.

Можно прикрутить трюк с beforeunload как предлагает dollar, но это уже не чисто на PHP решение. Ну и возможны ложные срабатывания, когда открыты несколько вкладок. Придется дополнительные проверки делать.

Еще можно сессионной куке не устанавливать Expires , и тогда она должна удалиться сама при закрытии сессии браузером, но. есть браузерные настройки и плагины, которые позволяют не обрывать сессию при закрытии вкладки и вообще никогда.

Потому предлагаю не мучиться, и просто выставить удобное для вас время жизни сессии.

Как за 10 секунд выйти сразу со всех соцсетей, почты Gmail, Вконтакте и др.

В экстренном случае можно очень быстро выйти со всех аккаунтов на всех сайтах: почта, социальные сети, личные кабинеты и т.д. Когда вы логинитесь на любом сайте и нажимаете «Запомнить меня на этом компьютере», то браузер запоминает вход с помощью файлов Cookie (куки). Таким образом, нужно просто очистить куки в браузере. Делается это также, как при очистке кэша браузера.

Как выйти со всех сайтов в Google Chrome

  • Зайти в «Меню -> История -> История» или нажать «Ctrl + H» : история гугл хром
  • В левом меню нажать «Очистить историю»: очистить историю
  • Оставить галочку «Файлы cookie и другие данные сайтов» : удалить куки
  • Временной диапазон «Всё время» ;
  • Нажать кнопку «Удалить данные» .

Этого достаточно, чтобы вышло с аккаунтов на всех сайтах в этом браузере. Если нужно максимально «зачистить следы», то поставьте все галочки, а особенно:

  • История браузера: удалит список всех посещённых страниц;
  • Изображения и другие файлы, сохранённые в кеше: очистит временные файлы;
  • Пароли и другие данные для входа: никто не сможет снова войти на ваши ресурсы без ввода логина и пароля.

Если вы используете несколько браузеров, то подобную процедуру нужно проделать в каждом из них.

Как быстро выйти с любого одного сайта

Описанная процедура выкинет вас со всех сайтов, но если нужно быстро выйти с одного аккаунта и/или удалить разрешения сайта, например доступ к веб-камере и вашему местоположению, тогда проделываем следующее:

меню сайта

  • Кликаем по значку слева от имени сайта в адресной строке браузера и выбираем «Настройки сайтов» :
  • Нажимаем «Удалить данные» ;
  • При необходимости также «Сбросить все разрешения» .

выйти на одном сайте

Если вам надо такое проделывать часто, то лучше установить расширение «EditThisCookie»

Затем на нужном сайте просто нажимать на пиктограмму расширения и затем кнопку корзины:

editthiscookie

Как разлогиниться в Mozilla Firefox

меню firefox

  • Заходим в «История -> Журнал -> Удалить историю» :
  • Ставим галочку на «Куки» , и при желании «Кэш»
  • Диапазон дат очистки: «Всё»
  • Жмём кнопку «Удалить» .

удалить всё firefox

Opera

меню opera

  • Заходим в «Меню» , спускаемся до кнопки «Очистить историю посещений» :
  • Временной диапазон ставим «Всё время» ;
  • Ставим галку «Файлы cookie и прочие данные сайтов» ;
  • Жмём «Удалить данные» .

выйти со всех сайтов в опере

Яндекс браузер, Internet Explorer, Microsoft Edge, Maxthon

В этих браузерах делаем всё тоже самое как в статье про очистку кеша браузеров, только не забываем ставить галочки «Файлы cookie, Куки» . Там же есть программа CCleaner, с помощью которой можно очистить куки сразу во всех браузерах за 10 секунд. Для быстрого доступа к окну чистки истории нажимаем кнопки «Ctrl+Shift+Del».

Как выйти со всех аккаунтов почты Gmail

Удаляя куки, мы разлогинились на всех сайтах на компьютере, но также просто выйти с аккаунтов на всех устройствах невозможно, нужно заходить в настройки каждого сервиса. В почте гугла Gmail нужно зайти в «Меню (значок с фото) -> Аккаунт Google -> Безопасность (меню слева)» :

выход из gmail

Или просто переходим по прямой ссылке на настройки безопасности почты Gmail https://myaccount.google.com/security. Спускаемся ниже до раздела «Ваши устройства» и если устройств больше одного, то нажимаем «Управление устройствами» :

безопасность gmail

Теперь поочерёдно кликаем по каждому устройству (смартфону, планшету, ноутбуку) и нажимаем кнопку «Выйти» :

выйти с устройства

Кстати, для почты советую настроить двухэтапную аутентификацию, так намного безопасней.

Выход из ВКонтакте на всех устройствах

Разработчики ВКонтакте сжалились над пользователями социальной сети и сделали всё намного проще, итак:

настройки вконтакте

  • Заходим в «Меню -> Настройки» :
  • В меню справа выбираем «Безопасность» ;
  • Кликаем по «Завершить все сеансы» .

завершить все сеансы

Кстати, чтобы вход в аккаунт не запоминался вообще, можно «сёрфить» в интернете в режиме «Инкогнито». Окно браузера в режиме «Инкогнито» открывается с помощью сочетания клавиш «Ctrl + Shift + N». После окончания пользования сайтом достаточно просто закрыть окно браузера, никакие вводы паролей в аккаунты не запоминаются.

Поняття куки, кеш, сесія в браузері

Поняття кеш, куки,сессія у браузері

Куки, кеш і сесія браузера – з цими поняттями обов’язково зіткнеться будь-який тестувальник, який працює з веб-додатками. Найчастіше, питань, пов’язаних з цими поняттями, виникає дуже багато. Для того, щоб розібратися у всіх тонкощах та мати загальне уявлення про те, що таке cookies, кеш і сесія браузера, потрібно визначитися з термінологією, сферою застосування цих даних і навчитися користуватися ними, в залежності від браузеру, що використовується.

Ні для кого не секрет, що для якісної роботи в інтернеті необхідно, щоб сайти завантажувалися швидко. Зайва секунда очікування завантаження веб-сторінки може стати вирішальною і змусити користувача покинути сайт, не дочекавшись завершення. Зрозуміло, в інтересах веб-майстрів не допустити цього.

Складність полягає в тому, що при кожному оновленні сторінки веб-сервер передає клієнту (браузеру) значний обсяг даних. Це ніяк не сприяє швидкій роботі сайту. Кеш браузера (browser cache) має вирішити цю проблему і оптимізувати роботу веб-додатку.

Грубо кажучи, інтернет-з’єднання повільніше, ніж робота вашого ПК. Завдяки кешуванню даних, браузер зберігає частину інформації локально на комп’ютері користувача. Тепер немає необхідності в повторному завантаженні однієї і тієї ж інформації, потрібні дані просто завантажуються з пам’яті персонального комп’ютера без використання інтернету. Звісно ж, завантаження сторінки в такому випадку здійснюється набагато швидше.

Що зазвичай зберігається в кеші? Як правило, веб-сторінки одного сайту об’єднує загальний дизайн. Отже, існують веб-елементи, які повторюються на різних сторінках, наприклад, логотип сайту. Щоб не передавати одне і те ж зображення при кожному переході, логотип може бути локально збережений в кеші і при оновленні сторінки він буде завантажений з жорсткого диска користувача, а не з сервера. Крім зображень кешуватися може звук, відео, текст і т. ін.

Кеш браузера має обмежений розмір. Ця величина може налаштовуватись. Коли розмір кешу досягає граничного значення, ті його частини, які не використовувалися найдовше, видаляються і звільняють місце новим елементам.

Куки (cookies) – це певний обсяг даних, який створюється веб-сервером після відвідування користувачем веб-сторінки і зберігається на комп’ютері користувача у вигляді окремого текстового файлу.

Як правило, cookies містять ідентифікаційні дані, інформацію про користувача, про параметри і налаштуваннях, обраних під час роботи з веб-сторінкою, та іншу службову інформацію.

Якщо браузер підтримує cookies, то цей обсяг даних передається від клієнта на сервер при кожному запиті. Для чого сайту ця інформація? Вона використовується, як правило, для:

  • аутентифікації користувача (інакше довелося б вводити логін і пароль при кожному запиті);
  • персоналізації – застосування обраних користувачем параметрів при подальших запитах (наприклад, мова сайту або товари в кошику);
  • збору і аналізу статистики;
  • відстеження сесії (поняття «сесія» розглянемо докладніше далі).

У технічному сенсі cookies – це невеликі за обсягом текстові файли. Максимально допустимий розмір одного такого файлу — 4096 байт. Що можна побачити в файлі куки:

  • ім’я cookie;
  • значення – те, що передається серверу і обробляється при запиті;
  • домен, якому належить cookie, і, відповідно, який може його отримувати;
  • шлях – URL в межах зазначеного домену, для якого конкретний cookie буде дійсним;
  • час життя. Cookies можуть зберігатися обмежений час, це час налаштовується для кожного конкретного куки. Це може бути конкретний час і дата або ж значення session, якщо куки існує до завершення поточної сесії;
  • HTTP. Це значення присвоюється в разі, якщо cookie буде використовуватися тільки HTTP;
  • безпеку. Цей параметр має на увазі, що даний cookie буде передаватися тільки за допомогою захищеного HTTPS-з’єднання;
  • розмір файлів куки в байтах.
Сесія

Особливість веб-серверу полягає в тому, що він не здатний розпізнати, чи надходять запити від одного і того ж браузера, або від різних, оскільки HTTP протокол не дозволяє відстежувати ці стани і підтримувати постійний зв’язок з клієнтом. Кожен новий запит обробляється окремо, без прив’язки до попередніх. Впоратись з цією проблемою допомагає сесія браузера (сеанс) – механізм, який дозволяє відстежити запити від одного браузера і зберегти деякі змінні під час переходів по сторінках сайту.

З початком сесії на стороні сервера створюється файл, який містить інформацію про користувача, про його дії і події, які відбулися в рамках одного сеансу. Такими подіями можуть бути перегляд сторінок сайту, різні взаємодії користувача з елементами сторінки, вчинення транзакцій і т. ін.

До тих пір, поки попередня сесія активна, нова не може бути розпочатою. Старий сеанс може завершитися при дотриманні однієї з умов (в залежності від налаштувань):

  • після закінчення певного часу бездіяльності (таймаут);
  • в певний час доби (опівночі, наприклад);
  • при закритті браузера.

Тепер, коли поняття кеш, куки, сесія браузера і відмінності між ними розглянуті, прийшов час навчитися ними користуватися. Як правило, користувачеві досить вміти очистити кеш браузера, увімкнути/вимкнути/видалити/змінити куки, а також знайти ці файли на своєму комп’ютері.

Почнемо з кешу. Тут важливо враховувати те, в якому браузері працює користувач. Не варто забувати, що кеш одного і того ж веб-додатку різні браузери зберігають в різних папках директорії C:\Users\Admin\AppData\Local\. Якщо не виходить знайти таку системну папку на своєму ПК, необхідно увімкнути в налаштуваннях відображення прихованих файлів. Кожен з браузерів створює в даній директорії свою папку, куди і зберігає файли кеша. Далі будуть розглядатися найпопулярніші браузери:

  • Google Chrome
  • Internet Explorer
  • Mozilla Firefox
  • Opera
  • Safari

Очистити кеш, куки і всі дані про сайті можна прямо в браузері. Для цього передбачена спеціальна опція в налаштуваннях. Розглянемо ті ж популярні браузери і знайдемо як в них очистити кеш:

  • Google Chrome

Налаштування – Конфіденційність і безпека – Очистити історію – Історія браузера – Видалити дані

  • Internet Explorer

Налаштування – Безпека– Видалити журнал браузера – Обрати тимчасові файли і cookie – Видалити

  • Mozilla Firefox

Налаштування – Приватність і захист – Куки і дані сайтів – Видалити дані – Видалити

  • Opera

Налаштування – Додатково – Конфіденційність і безпека

– Очистити історію відвідувань – Видалити дані

  • Safari

Розробка – Очистити кеші (має бути включено меню розробника в налаштуваннях програми )

Щоб не загубитися в налаштуваннях браузера, можна використовувати гарячі клавіші: Ctrl + Shift + Del для більшості браузерів і (Option) + ⌘ (Command) + E для Safari на Mac.

Щоб знайти cookies в Chrome, потрібно виконати таку послідовність кроків:

Меню браузера (три крапки в верхньому правому куті) – Налаштування – Додаткові – Налаштування сайту – Файли cookie

Таким чином відкриється меню управління файлами cookie. Які параметри можна налаштувати:

  • увімкнути/вимкнути збереження cookie за допомогою слайдера;
  • налаштувати видалення cookie після закриття браузера;
  • блокувати cookie;
  • увімкнути вищеперелічені опції для певних сайтів (список налаштовується вручну);
  • подивитися повний список збережених файлів cookies, шукати потрібні cookie в списку;
  • видалити cookie для всіх або деяких сайтів;
  • подивитися всю збережену інформацію кожного окремого файлу.

В Internet Explorer 11 ці опції доступні таким шляхом: Меню браузера – Властивості браузера – Вкладка «Конфіденційність» – Сайти/Додатково. У цьому меню є можливість роботи з файлами куки для певних сайтів. Щоб переглянути значення збережених параметрів куки для конкретного сайту, потрібно скористатися засобами розробника (натиснувши F12). На вкладці «Мережа» знаходиться список запитів, а в правому вікні у вкладці «Файли cookie» – інформація про них.

Розробка веб-додатків, часто, здійснюється досить динамічно. На практиці зміни можуть заливатися на сайт кілька разів в день. Що повинен пам’ятати тестувальник, так це те, що перед початком тестування сайту потрібно обов’язково очистити кеш. Якщо забути про цю просту процедуру, може трапитися так, що сторінка буде завантажуватися з кешу, і внесені зміни просто не буде видно. Досвідчений тестувальник завжди дотримується цього правила.

Механізм сесії покликаний ідентифікувати браузер і обробляти запити в рамках однієї сесії, використовуючи змінні з попередніх запитів. Як правило, вся інформація про сесії зберігається на сервері і недоступна на стороні клієнта. Якщо тестувальник знає, коли повинна завершуватися сесія і як повинен вести себе сайт в разі її завершення, він може скласти кілька тестових сценаріїв для перевірки.

Приклад №1

На сайті з надання банківських послуг є обмеження часу бездіяльності 10 хвилин. Після чого сесія примусово завершується і користувач бачить відповідне повідомлення. В цьому випадку тестувальник може перевірити, чи відображається повідомлення через 10 хвилин бездіяльності, чи має користувач доступ до інформації з закритої сесії, чи відбувається переадресація на головну сторінку, чи не оновлюється попередня сесія після закриття поп-ап вікна. Тестування сесії можна проводити, в тому числі, в рамках тестування безпеки.

Приклад №2

На сайті планується зміна дизайну. Було прийнято рішення провести дослідження для того, щоб вибрати варіант, який більше сподобається користувачам. В результаті, коли користувач заходить на сайт, він бачить один з двох варіантів дизайну. Після аналізу його поведінки, тривалості перебування на сайті і за іншими ознаками буде прийнято рішення про остаточний вибір оформлення. Очікується, що до того, як користувач закриє браузер, всі сторінки сайту, які він побачить, будуть оформлені однаково – відповідно до одного з двох дизайнів. В цьому випадку тестувальник повинен перевірити, що в рамках однієї сесії зовнішній вигляд сайту не змінюється. Тут розуміння того, що таке сесія, допомагає в здійсненні A/B тестування.

Читать:
Как подготовить диск к установке windows 7

Для редагування куки можна використовувати спеціальне розширення для браузера Google Chrome під назвою EditThisCookie. Після установки аддона, при переході на сторінку, користувач може відкрити список доступних cookies для цього сайту. Перераховані файли можуть бути видалені або ж відредаговані будь-яким чином. Крім того, є можливість додати куки, імпортувати в форматі JSON або експортувати їх.

Часто для коректної роботи сайту необхідно увімкнути куки. Повідомлення про це повинно бути показано користувачеві при першому переході на сайт. Варіанти перевірок в такому випадку – це робота сайту з увімкненими і з вимкненими файлами куки. Ще одна нетривіальна перевірка – зміна cookies вручну, використовуючи при цьому як валідні дані, так і невалідні, навмисно «ламаючи» куки.

Куки містять авторизаційну та іншу конфіденційну інформацію про користувача. Використовуючи інструменти для редагування цих значень тестувальник може перевірити, чи є можливість отримати доступ до аккаунту іншого користувача, змінивши файли куки. Таке тестування відноситься до тестування безпеки.

Для додавання або редагування cookie можна використовувати засоби розробника браузера. Для цих цілей існує властивість document.cookie. Потім в лапках прописуються пари «ключ = значення». Наприклад, рядок document.cookie = «ABC = DEF».

створить куки з ім’ям ABC і значенням DEF. Таким же чином можна змінити вже існуючі куки, прописавши команду з потрібними значеннями.

Для коректної роботи не завадить додати ще кілька властивостей всередині лапок, розділяючи їх крапкою з комою. наприклад:

  • domain (document.cookie=»ABC=DEF; domain=test.com» – такий рядок додасть куки з ім’ям ABC, значенням DEF і дійсні числа тільки для домену test.com);
  • expires (document.cookie=»ABC=DEF; domain=test.com; expires=Thu Jul 09 2020 14:26:51″ – тепер заданий і строк життя cookie – до 09.07.2020 14:26:51);
  • secure (document.cookie=»ABC=DEF; domain=test.com; expires=Thu Jul 09 2020 14:26:51; secure;» – це властивість робить cookie захищеною, дійсної тільки при https з’єднанні);
  • path (document.cookie=»ABC=DEF; domain=test.com; expires=Thu Jul 09 2020 14:26:51; secure; path=/;» – шлях в cookie буде вказано як «/», тобто значення відправлятиметься будь-який запит, якщо ж шлях обмежити певною безліччю документів, то кука буде відправлена ​​тільки при запиті до одного з них).

І найголовніше – як застосувати ці знання на практиці. На реальних проєктах уміння поводитися з cookies значно полегшує життя тестувальників. Тепер можна розібрати ситуацію, коли використовується редагування куки.

Приклад

На сайті є поп-ап, який повинен з’являтися раз в 7 днів. Сайт створює файл cookie для користувача зі значенням «showPopup»: false, термін життя якого (а значить і інтервал повторного відображення поп-апа) – тиждень. Після закінчення цього терміну нагадування для користувача показується знову.

Завдання тестувальника перевірити, що через зазначений час юзер побачить поп-ап. Як це протестувати? Звичайно, можна почекати 7 днів і перевірити, але витрачати стільки часу на такий тест нераціонально. Тут можна схитрувати і вручну змінити куки. Наприклад, відредагувати значення ключа «expires» і задати термін дії куки 1 хвилину. Через хвилину cookie стане неактуальною і користувач знову повинен побачити повідомлення.

На перший погляд куки, кеш і сесія браузера можуть здатися чимось заплутаним і незрозумілим. Однак, розібравшись з визначеннями і застосувавши отримані знання на практиці, можна переконатися, що в цьому немає нічого складного.

Работа с сессиями
Простая авторизация

$_SESSION — ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта. Это суперглобальная переменная , она доступна во всех контекстах скрипта.

Сессия — очень полезная возможность, которая позволяет, в том числе, передавать данные между страницами.

Это значит, коль $_SESSION — глобальный массив, то если мы запишем в него какие-то данные на одной странице, то эти данные будут доступны на другой странице на протяжении всей сессии (на протяжении всего сеанса), чего нет с любыми другими массивами. Конец сессии или сеанса — это закрытие браузера .

Для работы с сессиями существуют специальные функции: php.net

Наиболее полезные функции для работы с сессиями

session_start — открывает сессию, либо возобновляет ее, если файл сессии был найден.
session_unset — она удаляет все переменные текущей сессии.
session_destroy — уничтожает все данные, связанные с текущей сессией. Данная функция не удаляет какие-либо глобальные переменные, связанные с сессией и не удаляет сессионные cookie.
session_id — эта функция используется для получения или установки идентификатора текущей сессии.
session_name — возвращает имя текущей сессии. Если задан параметр name, session_name() обновит имя сессии и вернет старое имя сессии.

Открытие сессии

session_start — это та функция, которую мы должны выполнить, перед тем, как работать с сессиями. Данная функция запускает или открывает сессию и по сути, поскольку нам необходимо хранить данные, которые будут доступны между страницами, то сессия — это ничто иное как файл, который хранится во временной папке (эта папка будет хранится в папке: userdata/temp для Open Server ) В этот текстовый файл записываются все те данные, которые мы сохраняем в сессию. И когда мы запускаем на выполнение функцию session_start , то она создает такой файл либо обращается к нему, если файл уже был создан ранее. Причем этот файл индивидуален для каждой открытой сессии. Это значит, что если мы обратимся к одному и тому же скрипту из двух различных браузеров, то под каждый браузер, под каждого клиента будет открыт свой файл сессии и эти файлы никак друг с другом не пересекаются. Из этого следует, что с помощью сессий, мы можем организовать механизм аторизации пользователя, то есть получения доступа к какой-то закрытой части сайта.

Для того, чтобы понять, что данный файл принадлежит конкретному клиенту — делается это посредством куки .

Куки — это тот же самый файл, который хранится не на сервере, а на стороне клиента (в браузере), в нем содержится индификатор , который совпадает с идификатором файла , который лежит на сервере.

Запись и получение данных из сессии

Создадим простое приложение, с секретной страницей, доступ к которой будет иметь только пользователь, который введет правильные данные.

Для примера создадим три файла: sess1.php, sess2.php и secret.php

В файле sess1.php запишем в массив $_SESSION имя Андрей . При обновлении страницы в браузере это имя — выведится.

Функция session_start чувствительна к выводу — перед вызовом данной функции не должно быть никакого вывода в браузер . Если поставить перенос строки, который является выводом в браузер, то возникнет ошибка.

Файл sess1.php

// здесь ничего не должно быть
<?php
session_start (); // открываем сессию

echo session_id (); // индификатор сессии, который равен значению куки

$_SESSION [ ‘name’ ]= ‘Андрей’; // запишем в массив имя
echo $_SESSION [ ‘name’ ]; // выводим $_SESSION[‘name’]

// выведет: Андрей
// в файле сессии будет записано: name|s:12:»Андрей»;
?>

После обновлении страницы получим:

sess1.png

В файле сессии будет сделана запись: name|s:12:»Андрей» — сериализованная строка — это один из способов хранения массивов данных, где:
— name — ключ
— s:12 — длина строки в байтах (в кодировке utf-8, буквы кирилицы равны двум байтам)
— Андрей — содержимое $_SESSION[‘name’]
Если закомментировать строку $_SESSION[‘name’]= ‘Андрей’ , то в браузере, при обнавлении все равно выведится имя Андрей, это значит, что в сессии эти данные были запомненны . В этом можно убедиться, открыв файл сессии.

В файле sess2.php откраваем сессию и получаем доступ, к тому, что лежит в сессии — к тому же $_SESSION[‘name’] .

Файл sess2.php

<?php
session_start (); // открываем сессию
echo $_SESSION [ ‘name’ ]; // выводим $_SESSION[‘name’]
// выведет: Андрей
?>

Удаление данных из сессии

Если мы хотим удалить из сессии конкретное значени можно использовать функцию unset() , которая удаляет переменную — в данном случае нам надо удалить — $_SESSION[‘name’] . И удалив его, на какой то странице (на sess1.php), мы удаляем его целиком из сессии.

Если нам нужно удалить все значения сессии , то есть все переменные массива , можно использовать специальную функцию session_unset() которая удалит все сессионные переменные. Сессионый файл будет очищен.

Если мы хотим уничтожить сессию, включая и сам сессионный файл, — для этого используется функция session_destroy , хотя в куки он у нас остался и если закомментировать строку , то файл сессии вновь образуется.

Файл sess1.php

<?php
session_start (); // открываем сессию

$_SESSION [ ‘name’ ]= ‘Андрей’ ; // запишем в массив имя
$_SESSION [ ‘login’ ]= ‘andrey’ ; // запишем в массив логин
echo $_SESSION [ ‘name’ ]; // выводим $_SESSION[‘name’]

// выведет: Андрей
// в файле сессии будет записано: name|s:12:»Андрей»;

unset ( $_SESSION [ ‘name’ ]); // удаляем из сессии конкретное значение
session_unset (); // удаляет из сессии все переменные
session_destroy (); // уничтожает сессию, включая и сам сессионный файл
?>

Простая авторизация

Создадим пункты меню и поместим их в каждый из файлов: sess1.php , sess2.php и secret.php . Наша задача — ограничить доступ к странице secret .

Что бы ограничить доступ к странице secret.php мы задаем простое условие (авторизация будет происходить по логину):

Если у нас не существует ( !isset ) в сессии ( $_SESSION ) элемент ( admin ) — мы завершим работу и выведем: «Вы не авторизованы!» ,

( die или exit — вывести сообщение и прекратить выполнение текущего скрипта)

если мы прошли проверку, то выведем: «Добро пожаловать, <$_SESSION['admin']>«

Файл secret.php

<?php
session_start() ; // открываем сессию

if ( ! isset ( $_SESSION [ ‘admin’ ])) die ( ‘Вы не авторизованы!’ );
echo «Добро пожаловать, < $_SESSION [ 'admin' ]>» ;
?>

На странице файл sess1.php создадим форму авторизации:
— action=»» — обработчик будет на этой же странице
— method=»post» — метод POST
— input type=»text» — поле ввода
— name=»login» — имя «login»
— type=»submit» — кнопка тип «submit»
— Login — надпись

Далее нам необходимо принять данные из формы: если не пуст ( !empty ) элемент с ключем login ( $_POST[‘login’] ), то мы должны сравнить, то что передал пользователь с каким-то нашим логином — с тем логином, который мы разрешаем для авторизации. Его определим в виде константы: имя константы — ADMIN , значение — строка admin — такой логин будет разрешен.

Далее проверяем: если у нас $_POST[‘login’] будет равен значению константы ADMIN , мы должны записать что-то в сессию, а именно создать сессионную переменную $_SESSION[‘admin’] = ADMIN , и выведем сообщение: «Вы успешно авторизовались!» .

В противном случае выведем: «Неверный логин» .

Файл sess1.php

<?php
// определяем константу для сравнения с логином пользователя
define ( ‘ADMIN’ , ‘admin’ );

// открываем сессию
session_start();

// принимаем данные из формы
if (! empty ( $_POST [ ‘login’ ])) <
// создаем сессионную переменную
if ( $_POST [ ‘login’ ] === ADMIN ) <
$_SESSION [ ‘admin’ ] = ADMIN ;
echo ‘Вы успешно авторизовались!’ ;
> else <
echo ‘Неверный логин’ ;
>
>
?>

<!— форма авторизации —>
<form action= «» method= «post» >
<input type= «text» name= «login» >
<button type= «submit» > Login </button>
</form>

Избавление от проблемы F5

При обновлении страницы возникает проблема F5.

Чтобы избавиться от этой проблемы нам надо перезапросить страницу . Чтобы перезапросить страницу средствами PHP, мы можем сделать редирект : header(«location: sess1.php») . И для того, чтобы дальше ничего не выполнялось, мы должны завершить выполнение скрипта: die , а чтобы получить сообщение о регистрации его надо записать в сессию : $_SESSION[‘res’] = ‘Вы успешно авторизовались!’ и вывести: если у нас существует (if(isset)) в сессии $_SESSION элемент [‘res’] , то выведем его echo $_SESSION[‘res’] .

То же самое мы можем сделать и для ошибки: $_SESSION[‘res’] = ‘Неверный логин’ , И редирект теперь нужен для любого случая, и в случае ошибки, и в случае успеха. Вынесем его за пределы условий.

Удалим ненужную переменную из сессии: unset($_SESSION[‘res’]) .

Файл sess1.php

<?php
// открываем сессию
session_start ();

// определяем константу для сравнения с логином пользователя
define ( ‘ADMIN’ , ‘admin’ );

// принимаем данные из формы
// если у нас что-то пришло POST-ом
if ( ! empty ( $_POST [ ‘login’ ])) <
// и если это равно константе ADMIN
if ( $_POST [ ‘login’ ] === ADMIN ) <
// тогда мы создадим сессионную переменную,
// чтобы мы могли попасть на страницу secret
$_SESSION [ ‘admin’ ] = ADMIN ;

// записываем сообщение в сессию об успехе
$_SESSION [ ‘res’ ] = ‘Вы успешно авторизовались!’ ;

> else <
// иначе запишем сообщение об ошибке
$_SESSION [ ‘res’ ] = ‘Неверный логин’ ;
>
// и сделаем в любом случае редирект,
// чтобы перезапросить страницу и сбросить данные из формы
header ( «Location: sess1.php» );
// и завершаем выполнение скрипта
die ;
>
?>
<ul>
<li>< a href= «sess1.php» > sess1 </a></li>
<li>< a href= «sess2.php» > sess2 </a></li>
< li>< a href= «secret.php» > secret </a></li>
</ul>
<hr>
<!— если существует сессионная переменная, то выводим сообщение —>
<?php
if ( isset ( $_SESSION [ ‘res’ ])) <
echo $_SESSION [ ‘res’ ];
// удалим ненужную переменную из сессии
//(после обновления страницы сообщение — не нужно)
unset ( $_SESSION [ ‘res’ ]);
>
?>
<!— форма авторизации —>
<form action= «» method= «post» >
<input type= «text» name= «login» >
<button type= «submit» > Login </button>
</form>

sess2.png

Механизм выхода из сессии

В файле secret.php реализуем механизм выхода. При его работе из сессии будет удалятся сессионная переменная $_SESSION[‘admin’] и пользователь без авторизации не получит сюда доступ.

Ссылка для выхода из сессии:

<a href= «secret.php?do=exit» > Logout </a>

В результате в массиве GET ( в командной строке ) получим: secret.php?do=exit , то есть, у нас появится элемент do со значением exit .

Это значит, что мы можем добавить условие :

if ( isset ( $_GET [ ‘do’ ] && $_GET [ ‘do’ ] == ‘exit’ )) <
unset ( $_SESSION [ ‘admin’ ]); // удаляем сессионную переменную
header ( «Location: sess1.php» ); // делаем редирект
die ; // и завершаем выполнение скрипта
>

-если у нас существует в массиве $_GET элемент do и при этом $_GET[‘do’] равняется строке exit , то мы удалим сессионную переменную $_SESSION[‘admin’] .

Далее можно опять перезапросить страницу. (редирект: header(«location: sess1.php») ).

Похожие статьи