Активная сессия что это
Что такое сессии и как с ними работать в php
Протокол http, используемый для загрузки содержимого web-страниц, работает следующим образом: клиент присылает серверу http-запрос, сервер его обрабатывает и отправляет клиенту сформированный ответ. Всё, на этом общение закончено. Если нужны новые данные — клиент посылает новый запрос, а сервер присылает новый ответ и так далее.
При этом существует ряд задач, когда серверу для формирования ответа нужно понимать, присылал ли этот клиент какие-то http-запросы ранее и что происходило в процессе их обработки. Самый очевидный пример — авторизация. Скажем, клиент в очередном http-запросе запрашивает какую-то страницу личного кабинета. Что делать серверу? Если клиент авторизован (ранее присылал правильные данные для авторизации), то нужно ему эту страницу показать, а если не авторизован — то не нужно. А как узнать, авторизован пользователь или не авторизован? Значит нужно где-то хранить результаты выполнения предыдущих http-запросов.
Как раз для таких случаев и придумали сессии, — специальный механизм, позволяющий серверу идентифицировать присылающих http-запросы клиентов, а также запоминать для этих клиентов различные данные.
Применительно к php можно сказать, что сессии — это механизм, позволяющий php-скрипту, обрабатывающему очередной http-запрос, сделать следующие вещи:
Работают сессии следующим образом: сервер запоминает данные сессии (какие-то переменные) в специальном хранилище, которое подписывает сгенерированным уникальным идентификатором. Этот же идентификатор отправляется клиенту. При следующем http-запросе клиент присылает серверу полученный идентификатор, по которому сервер понимает от какого клиента пришёл запрос и с каким хранилищем ему работать (откуда восстанавливать данные и куда их сохранять).
Для работы с сессиями в php существуют специальные встроенные функции. Этих функций довольно много, основные я опишу ниже, а остальные можете посмотреть в документации, например вот здесь. Функции для работы с сессиями имеют большое количество всяких настроек, которые можно настраивать через конфиг php-сервера (файл php.ini), либо задавать в качестве опций непосредственно при вызове соответствующих функций. Многие настройки можно посмотреть через php_info().
По-умолчанию в качестве хранилища данных сессий php использует обычные файлы во временной папке. За это отвечает опция session.save_handler, которая по умолчанию установлена в значение files. При желании можно назначить свои собственные обработчики на связанные с сессиями события (старт, идентификация, сохранение данных и так далее) и хранить данные сессии как угодно и где угодно. Путь ко временной папке можно узнать при помощи функции sys_get_temp_dir().
Скрипт php может передать клиенту идентификатор созданного хранилища с помощью установки cookie или дописывая его к расположенным на загруженной странице адресам в качестве параметра GET-запроса. Выбор способа определяется настройками session.use_cookies, session_use_only_cookies и session_use_trans_sid. По умолчанию php настроен на использование только cookies (первые две настройки установлены в единицу, а последняя — в ноль). Используемое имя сессионной куки по-умолчанию — PHPSESSID.
Клиент может передать php-скрипту на сервере полученный ранее идентификатор любым способом (через cookie в заголовке запроса или указывая в качестве параметра GET-запроса) независимо от настроек. В случае с редиректом через header(‘Location: url’) куки не работают и идентификатор сессии должен быть передан на сервер в качестве параметра GET-запроса.
Время жизни сессии определяется параметром session.gc_maxlifetime. По прошествии этого времени файлы данных сессии будут рассматриваться как мусор и могут быть удалены. Кроме того, можно задать время жизни отправляемой клиенту cookie (для этого используется параметр session.cookie_lifetime). По-умолчанию для session.cookie_lifetime установлено значение 0, которое означает, что кука будет актуальна до закрытия браузера (просроченные куки называются «протухшими»).
Далее давайте рассмотрим основные функции для работы с сессиями из php скриптов. Лучше всего установить какой-нибудь WAMP/WNMP комплект и попробовать проделать своими руками всё, о чём ниже пойдёт речь. Я обычно использую OpenServer + Firefox (в этом браузере удобнее всего вызывать отладчик — одной кнопкой F12).
Функция session_start() имеет довольно много опций, которые позволяют настраивать различные параметры сессии (имя, время жизни, безопасность и так далее). Подробности можно прочитать в документации. Если никакие опции не указывать, то будут использоваться настройки по-умолчанию, — из конфига php. Главное правило при использовании функции session_start() состоит в том, что она должна вызываться до какого-либо вывода (то есть до начала формирования тела ответа).
Вторая нужная функция — ini_set(). С помощью этой функции можно менять настройки php по-умолчанию. При этом значения в файле php.ini не изменяются, новые настройки действуют только для текущего скрипта и только до окончания его обработки.
Ещё одна нужная функция — session_name(). С помощью этой функции можно получить имя текущей сессии (если вызвать функцию без параметров) или изменить имя сессии (если указать в качестве параметра новое имя).
Вообще, как я уже сказал, функций довольно много, у большинства из них есть куча разных настроек, так что доку тут читать не перечитать.
Контроль сессий, пароли приложений и подтверждение входа на Facebook
Активные сессии на Facebook
Что такое активные сеансы
Раздел Активные сессии на странице «Настройки безопасности» показывает список последних случаев доступа к Вашей учетной записи на Facebook.
Каждая запись содержит дату и время входа в систему, примерное местоположение из которого происходила авторизация, и тип устройства, используемого для входа в аккаунт. Справа от каждой записи появится также возможность завершения сеанса.
Примечание: Указывается местоположение определяемое на основе IP-адреса, с которого был получен доступ к учетной записи. Если вы хотите узнать точные данные, касающиеся IP-адреса входа в систему, просто установите указатель мыши над информацией о местоположении сессии.
Что значит ситуация, когда я не узнаю места входа
Если вы заметили место, которое не узнаете, сначала проверьте, что эта сессия не связана с мобильным устройством. Во время входа с помощью мобильных устройств часто используется динамический IP-адрес, который не отражает физического местоположения пользователя.
Если Вы не знаете, местоположения и оно не связано со входом при помощи мобильного устройства, причины могут быть следующие:
Пароль приложения Facebook
Что такое пароль для приложений
Пароль к приложению, это одноразовые пароли, которые используются для входа в программу. Использование паролей для приложений поможет в обеспечении безопасности Facebook.
Кроме того, если услуга подтверждения регистрации включена, когда используется пароль к приложению, не нужно будет ждать получения кода. Вместо этого, вы можете пропустить подтверждение входа в систему и войти в систему сразу же.
Чтобы получить пароль к приложению:
Примечание: запишете список приложений, для которых вы создали пароль приложений, но не храните в нем самих паролей.
Подтверждение входа на Facebook
Что такое функция подтверждения входа в систему
Подтверждение входа в систему – это дополнительная защита аккаунта Facebook, связанная с функцией Уведомление о входе, но с дополнительным этапом процедуры безопасности.
После включения подтверждения входа в систему при каждой попытке получения доступа к учетной записи на Facebook с неопознанного компьютера или мобильного устройства, возможно, потребуется ввести код для входа в систему.
После входа в систему вы будете иметь возможность дать этому устройству имя и сохранить его в вашем аккаунте. Ввод кода не потребуется при входе в систему с одного из официальных устройств.
Чтобы включить функцию подтверждения входа в систему:
Примечание:Чтобы иметь возможность включить Подтверждение входа необходимо сохранить в данных счета номер телефона.
Как закрыть доступ к Facebook без кода
Если вы не хотите, чтобы любой человек имел возможность войти в ваш аккаунт с любого места, вы можете включить Подтверждение регистрации.
После включения названной функции, при каждой попытке получения доступа к учетной записи с неопознанного устройства (например, компьютера или мобильного телефона), возможно, потребуется ввести код для входа в систему.
Что будет если я попытаюсь зайти с другого компьютера
Когда вы попытаетесь войти в систему с неопознанного устройства, появится сообщение с просьбой ввести код для входа в систему.
Если вы установили приложение Генератор кодов, откройте приложение Facebook для Android и получите код.
Если приложение не установлено, проверьте защитный код на телефоне, введите его и воспользуйтесь службой. В случае возникновения проблем с получением защитного кода подождите несколько минут и запросите новый код с помощью ссылки Отправить код еще раз. Для получения дополнительной информации по устранению проблем, нажмите на ссылку Я не могу получить код.
Как получить код подтверждения
Если вы включили Подтверждение входа, вы получите сообщение SMS с кодом входа в систему каждый раз, когда он вам понадобится. Если же вы используете приложение для Android, вы можете скачать программу Генератор кодов.
Мне вводить код при каждом входе в систему
После ввода защитного кода и входа в систему необходимо присвоить компьютеру или телефону условное имя и сохранить его (если устройство необходимо Вам). Если вы будете продолжать получать запросы на ввод кода при входе в систему с помощью одного из сохраненных (официальных) устройств, может потребоваться настройка параметров браузера.
В случае использование Вами функции подтверждения входа, система должна сохранить данные Вашего компьютера и браузера, чтобы они могли быть распознаны при следующем входе в систему.
Некоторые функции браузера не позволяют этого. Если вы используете функцию приватного просмотра или ваш браузер настроен так, чтобы очищать историю использования при закрытии.
Все, что нужно знать о сессии на сайте
Под сессией принято понимать строго обозначенный промежуток времени, на протяжении которого пользователь пребывает на сайте. Все пользователи для входа в интернет используют специальные программы – браузеры. Идентификация пользователя в интернете осуществляется с учетом его персональных данных, речь идет о cookies-файлах и IP-адресе.
Протяженность сеанса пользователя на сайте определяется исходя из промежутка между первым и последним действием, совершенным им на сайте. Практика показывает, что в ходе измерения протяженности сеанса возникают трудности. В первую очередь это обусловлено отсутствием возможности постоянного контроля над временем просмотра страницы, на которую перешел пользователь по ссылке. На данный момент не существует программного обеспечения, способного выполнять такие задачи.Чтобы разобраться в том, что такое сессия на сайте, рассмотрим следующий пример:
Сессия как событие в сервисах аналитики применяется с целью наблюдения за поведением пользователей, посещающих сайт. Сессия напрямую взаимосвязана со следующими метриками:
На данный момент сессия как событие характеризуется широкой областью применения, одним из вариантов ее использования могут быть следующие сценарии:
В рамках данной статьи мы будем рассматривать сессию применительно к сайту и веб-аналитике. В данном случае сессия выступает в качестве инструмента для определения последовательности запросов, выполняемых пользователем.
Если рассматривать сессию с точки зрения отдельного события, то речь идет о совокупности запросов, отправляемых от лица клиента в момент его взаимодействия с хостом/сервером. Клиент может быть представлен не только в виде браузера, но и в виде поискового робота или веб-приложения. Хост в большинстве случаев – это сайт.
Сессия может включать в себя все запросы, совершенные клиентом на протяжении строго обозначенного промежутка времени.
Сервер самостоятельно классифицирует запросы, поступающие от клиента. Сейчас широко применяется идентификация запроса – cookies-файл, важно отметить, что помимо него существуют и другие варианты. В качестве примера можно рассмотреть идентификацию запросов клиента посредством обращения к параметрам запроса, MAC-адресу, что стало возможным благодаря расширенным HTTP-заголовкам.
Для удаления сессии задействуется функция session_destroy(). Посредством одного вызова можно осуществить удаление всех переменных сеанса. Для удаления одной переменной сессии рекомендуется обратиться к функции unset(), которая дает возможность произвести отключение необходимой переменной.
Каждый сайт содержит в себе не только вход, но и выход, который представлен в виде специального сценария, его основной целевой задачей является комплексная очистка сессии, после этого пользователь попадает на главную страницу.
Если рассматривать сессию в ее взаимосвязи с сайтом, то речь идет о многоаспектном понятии. При этом на практике чаще оно используется в тех случаях, когда возникает необходимость в составлении отчетов веб-аналитики. Комплексное изучение сессии как события позволит увеличить эффективность анализа отчетов веб-аналитики.
HTTP сессия. Session. Состояние сеанса. Работа с сессиями в ASP.NET MVC
Давайте рассмотрим такое понятие как сессия (HTTP-сессия, Session). Или по-другому, сеанс пользователя. Почему важно понимать механизм работы сессий. И посмотрим, как можно работать с состояниями сеансов на платформе ASP.NET.
Прежде чем мы дадим определение термину «сессия», давайте немного рассмотрим предысторию, зачем вообще возникла потребность в сессиях, рассмотрим одну особенность протокола HTTP.
Одной из основных особенностей протокола HTTP является то, что он не обязывает сервер сохранять информацию о клиенте между запросами, то есть идентифицировать клиента. Это так называемый stateless-протокол. Связь между клиентом и сервером заканчивается как только завершается обработка текущего запроса. Каждый новый запрос к серверу подразумевается как абсолютно уникальный и независимый, даже если он был отправлен повторно от одного и того же источника.
Что, если оставить stateless-природу протокола HTTP и не идентифицировать пользователя? Без состояний сеанса можно легко обойтись, если на вашем сайте представлена статичная (обезличенная) информация, например, новостная статья, состоящая из текста и изображений. В таком контексте совершенно необязательно ассоциировать несколько запросов с одним пользователем. Ведь содержание статьи никак не изменится, будь то десять запросов с одного устройства, либо десять запросов от разных людей с разных устройств.
Но как только мы собираемся передать персональную информацию на сервер, нам необходимо каким-то образом сделать так, чтобы сервер ассоциировал все наши запросы именно с нами, и в будущем верно определял все исходящие от нас запросы. Если этого не сделать, то с каждым новым запросом мы будем вынуждены повторно передавать необходимые персональные данные. Например, логин для входа в личный кабинет на сайте, или такую информацию как имя, адрес доставки, при совершении покупки в интернет-магазине.
Вот как раз в таких ситуациях, когда требуется персонализировать запросы от одного клиента, мы будем использовать сессии.
Когда клиент впервые передает персональные данные в запросе, на сервере создается новая сессия для этого клиента. В период времени жизни сессии все запросы от этого клиента будут однозначно распознаны и связаны с ним. По истечении этого времени связь с клиентом будет потеряна, и очередной запрос от него будет обрабатываться как абсолютно уникальный, никак не связанный с предыдущими.
Например, при совершении покупки в онлайн магазине персональная информация пользователя сохраняется в сессии, пока он путешествует по сайту. Это выбранные товары в корзине, адрес доставки, контактные данные и так далее.
Теперь давайте посмотрим, как это мы можем реализовать технически. Вообще существует несколько техник управления сессиями клиента, их количество и способ реализации во многом зависит от веб-платформы или технологии, что работает на сервере. В этом уроке мы рассмотрим следующие:
Попробуем их реализовать, используя платформу ASP.NET. Давайте кратко рассмотрим первые два механизма, и особое внимание уделим третьему, как более надежному, удобному и безопасному.
Скрытые поля на HTML-форме (hidden form fields)
Суть данного подхода состоит в том, что мы обеспечиваем навигацию по сайту при помощи стандартных html-форм. И при каждом следующем запросе мы сохраняем данные из предыдущего в скрытых полях на форме. Например:
Давайте рассмотрим особенности такого подхода. Плюсов практически нет, разве что реализовать данную технику можно очень быстро. Но опять же и другие подходы тоже можно реализовать очень быстро. А вот минусы есть, и довольно существенные:
Куки (cookies)
В данном подходе мы не храним сессионные данные непосредственно на форме, вместо этого используется стандартный механизм работы cookies между клиентом и сервером. В cookies и хранятся все пользовательские данные.
При выборе этого подхода опять же главной остается проблема безопасности наших данных, которые мы передаем на сервер – их легко подменить или украсть, они лежат в открытом виде. Также, если в настройках приватности браузера клиента отключен прием куки с сайтов, то такой вариант ведения сессии вовсе не будет работать.
Серверный механизм управления сессией (Session, SessionState)
Разберем, как работает механизм сессии со стороны сервера и со стороны клиента.
При стандартных настройках работы состояния сеанса для отслеживания серии запросов от одного клиента используется т.н. сессионная куки (session cookie). Алгоритм следующий:
В этом участке кода мы записываем в состояние сеанса имя пользователя. Это имя мы забираем с html-формы, которую он нам отправил. Дополнительно через свойства мы узнаем, создана ли эта сессия только что, то есть в рамках текущего запроса (если да, то и значение свойства IsNewSession будет равняться true), и уникальный идентификатор сессии. Этот идентификатор после обработки запроса будет автоматически записан в сессионную куки (если еще нет) и отправлен в ответе клиенту.
В браузере клиента можно наблюдать соответствующую куки и идентификатор его сессии:
В процессе следующего запроса от этого клиента давайте прочитаем его ранее сохраненное имя из сессии. Также принудительно завершим сессию. Работа с этим клиентом закончена, например, все данные обработаны и товар отправлен.
Как видно, работать с сессиями очень просто и удобно. Большинство процессов, связанных с обработкой сессии, происходит автоматически в фоновом режиме. Естественно, разработчик может вмешаться на любой стадии обработки сессии и внести свои коррективы.
В конфигурации выше мы указали, что таймаут сессии будет 40 минут, сессионные данные пользователя будут храниться в оперативной памяти, будут использоваться сессионные куки, также поменяли стандартное название такой куки на собственное.
Сессия
Сессия (от лат. – sessio — заседание, англ. – session) – это промежуток времени, охватывающий работу пользователя в интернете с момента открытия первой и до последней ссылок. Рассчитывается как разница во времени между начальным и финальным запросами. Однако последняя страница может просматриваться пользователем различное время, из чего, следовательно, измерение времени между двумя запросами становится более затруднительным.
Как связана сессия с протоколом HTTP и COOKIES
Что такое сессия можно объяснить, отталкиваясь от протокола HTTP. Сам по себе, этот протокол не располагает способом сохранения состояния между двумя операциями. Т.е., проще говоря, открывая одну страничку, а затем, перейдя с неё на другую, HTTP не сможет установить, что оба запроса принадлежат одному пользователю. И тут на помощь приходит особый метод отслеживания – управление сеансами (нашими сессиями).
Отсюда, отвечая на вопрос, что такое сессия, можно сказать, что это – вспомогательный логический объект, способствующий передачи данных между последовательными HTTP – запросами от одного юзера.
Cookies, как и сессия, хранят сведения о пользователе во время его перемещения по разным страницам и улучшают работу протокола. Но в отличие от второй, где данные хранятся во временных файлах на сервере, они сохраняют их на компьютере пользователя в виде небольших фрагментов.
Для чего нужны сессии
Использование сессий становится незаменимым при работе с такими сайтами, как форумы, доски объявлений и Интернет – магазины, ведь в этом случае нужно сохранять данные о юзере на протяжении нескольких страниц.
Этапы сессии
Всю сессию можно разделить на три этапа:
Советы при использовании сесии
Из-за того, что данные сессии сохраняются на стороннем сервере, то лучше всего не держать большие объемы информации в них, а использовать cookies.