Что такое сессия на сайте
Перейти к содержимому

Что такое сессия на сайте

  • автор:

Сессии — Введение в тестирование веб-приложений

Представим, что мы зашли в онлайн-магазин, ввели логин и пароль. Далее выбрали товары и добавили их в корзину. После этого нас отвлекли, мы выключили компьютер и ушли. Вернувшись, мы открыли браузер, а все товары находятся в корзине. При этом мы находимся под своей учетной записью.

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

Что такое сессии

Представим, что мы зашли на сайт без механизма сессии. Мы авторизовались на сайте, но после каждого перехода на новую страницу сайт «выкидывает» нас из аккаунта. Дело в том, что сайт не помнит, что мы это мы, — он не может определить этого. Поэтому необходимо снова войти в аккаунт, что неудобно, особенно при просмотре товаров в магазине.

Серверы не помнят ничего о пользователе из-за механизма работы протокола HTTP. Это непостоянное соединение, при котором один раз устанавливается связь с сервером. Каждый HTTP-запрос к серверу обрабатывается как новый — без привязки к пользователю. Сервер отвечает на запрос, и соединение закрывается.

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

При использовании сессий сайт может помнить о пользователе. Это используется для разных целей:

  • Сохранить введенные пользователем данные
  • Подстроить выдачу под интересы пользователя. Например, чтобы показывать объявления только из тех категорий, товары из которых мы смотрели ранее
  • Показывать персональные предложения в зависимости от действий на сайте

Мы постоянно видим персональную рекламу после поиска в гугле. Стоит один раз поискать товар, как все рекламные блоки пестрят объявлениями о тех товарах или услугах, которые мы искали. Это называется контекстная реклама и работает она, в том числе, благодаря сессиям.

Для такой связи используется механизм, который называется cookies. Он позволяет долгое время держать связь между конкретным браузером и сервером.

Что такое Cookies

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

По этим данным сервер узнает нас и персонализирует сайт под нас:

Сервер помнит о том, что мы вводили свой логин и пароль, или показывает товары из тех категорий, которые мы недавно просматривали.

Какие виды сессий существуют

Сессии делятся на два вида:

  • Временные
  • Постоянные

Временная сессия существует только до момента закрытия вкладки. Такой эффект можно увидеть, если в браузере перейти в режим «Инкогнито». В этом режиме браузер хранит все действия до момента закрытия вкладки. Как только вкладка закрывается, то сайт перестанет помнить о том, что мы авторизовались, просматривали товары и так далее.

Постоянная сессия хранится на компьютере в виде куки и может быть использована даже после выключения устройства. Слово «постоянная» не совсем верное, так как куки хранятся определенное количество времени, которое задано в самой сессии.

Время, которое «живет» кука, определяется разработчиками и зависит от его задач. Посмотреть это время можно с помощью DevTools.

Как посмотреть сессии в DevTools

DevTools позволяет посмотреть все куки, которые установленны для сайта. При тестировании это помогает узнать, какие данные сохраняются в куках и правильно ли они устанавливаются.

Как посмотреть куки на примере браузера Firefox:

  1. Открыть DevTools
  2. Перейти во вкладку Storage
  3. Во вкладке Cookies выбрать текущий сайт

В этой вкладке можно увидеть все возможные куки, которые связаны с сайтом. В примере выше они связаны с сайтом Хекслета.

Если кликнуть на любую строчку, то покажется информация про выбранную куку:

Здесь 4 основных поля:

  • Название и значение Cookie
  • Created — дата и время установки куки
  • Domain — домен, для которого установлена кука
  • Expires / Max-Age — дата и время, для которых установлена кука

На скриншоте устанавливается кука с названием previousUrl, которая имеет значение ru.hexlet.io%2Fprograms%2Ffrontend. По названию понятно, что хранится значение последней страницы, на которой был пользователь. Cookie была установлена на полчаса для домена ru.hexlet.io.

С помощью этих данных можно протестировать, правильно ли устанавливается кука, как долго она «живет» и не происходит ли конфликта с другими куками. Эти данные определяются разработчиками или отделом маркетинга. Задача тестировщика — проверить корректность установки сессий и срок их жизни.

Выводы

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

Так сайт или приложения помнят последние действия пользователей, например, что он входил в свой личный кабинет и не «выкидывает» пользователя при переходе на новую страницу.

Существует два типа сессий:

  • Временные. Они существуют до тех пор, пока пользователь не закроет браузер
  • Постоянные. Они хранятся в виде файлов Cookies, которые имеют свой срок службы

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

  • Статья «Как учиться и справляться с негативными мыслями»
  • Статья «Ловушки обучения»
  • Статья «Сложные простые задачи по программированию»
  • Вебинар « Как самостоятельно учиться »

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Все, что нужно знать о сессии на сайте

Под сессией принято понимать строго обозначенный промежуток времени, на протяжении которого пользователь пребывает на сайте. Все пользователи для входа в интернет используют специальные программы – браузеры. Идентификация пользователя в интернете осуществляется с учетом его персональных данных, речь идет о cookies-файлах и IP-адресе.

Протяженность сеанса пользователя на сайте определяется исходя из промежутка между первым и последним действием, совершенным им на сайте. Практика показывает, что в ходе измерения протяженности сеанса возникают трудности. В первую очередь это обусловлено отсутствием возможности постоянного контроля над временем просмотра страницы, на которую перешел пользователь по ссылке. На данный момент не существует программного обеспечения, способного выполнять такие задачи.Чтобы разобраться в том, что такое сессия на сайте, рассмотрим следующий пример:

  • Необходимо войти в любой браузер;
  • Пройти процедуру авторизации в двух аккаунтах на одном сервисе (напр., в аккаунтах Google). И тут возникают первые трудности, так как сервис не дает возможности находиться одновременно в двух аккаунтах и предлагает выбрать какой-то один;
  • Далее открываем другой браузер, при этом не выходим из первого. Пробуем зайти во второй аккаунт на сервисе;
  • На этот раз уведомление от сайта не появилось и пользователь может просматривать сайт и со второго аккаунта.

Сценарии сессии на сайте

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

  • Просмотр страницы;
  • Продолжительность сеанса;
  • Действия, совершенные пользователем, во время его пребывания на странице;
  • Вовлеченность трафика.

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

  • Обработка данных с последующим удалением персональных данных пользователей;
  • Анализ трафика на сайте;
  • Тестирование сервера или сайта.

В рамках данной статьи мы будем рассматривать сессию применительно к сайту и веб-аналитике. В данном случае сессия выступает в качестве инструмента для определения последовательности запросов, выполняемых пользователем.

Клиент и сервер. Практическая реализация распознавания запроса

Если рассматривать сессию с точки зрения отдельного события, то речь идет о совокупности запросов, отправляемых от лица клиента в момент его взаимодействия с хостом/сервером. Клиент может быть представлен не только в виде браузера, но и в виде поискового робота или веб-приложения. Хост в большинстве случаев – это сайт.

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

Сервер самостоятельно классифицирует запросы, поступающие от клиента. Сейчас широко применяется идентификация запроса – cookies-файл, важно отметить, что помимо него существуют и другие варианты. В качестве примера можно рассмотреть идентификацию запросов клиента посредством обращения к параметрам запроса, MAC-адресу, что стало возможным благодаря расширенным HTTP-заголовкам.

Взаимодействие HTTP-протокола на протяжении сеанса
Процесс создания и завершения сеанса на сайте

Открытие сессии PHP обеспечивается за счет функции session_start(), которая осуществляет проверку открытых сессий и в случае их отсутствия, производит запуск этой функции. Оптимальное решение – это размещение вызова session_start() в начале страницы. Переменные сеанса находятся в суперглобальном ассоциативном массиве $_SESSION[]. Открытие сессии позволяет получить доступ к этим переменным.

Для удаления сессии задействуется функция session_destroy(). Посредством одного вызова можно осуществить удаление всех переменных сеанса. Для удаления одной переменной сессии рекомендуется обратиться к функции unset(), которая дает возможность произвести отключение необходимой переменной.

Заключение

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

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

Руководство часть 7: Сессии

Эта часть расширяет наш сайт LocalLibrary, добавляя счётчик посещений домашней страницы, реализованного при помощи сессий. Это относительно простой пример, но он демонстрирует то, как при помощи сессий реализовать анализ поведения анонимных пользователей на сайте.

Требования: Завершить изучение всех предыдущих разделов, включая Django Руководство Часть 6: Обобщённые отображения списков и детальной информации
Цель: Понимать как применять сессии.

Обзор

В предыдущих частях мы создали сайт LocalLibrary, который позволяет пользователям получать из каталога списки книг и авторов. На данный момент каждый посетитель сайта получает доступ к одним и тем же страницам и типам информации динамически сформированными из базы данных.

В «настоящей» библиотеке вам хотелось бы предоставить пользователю индивидуальные услуги, которые зависят от его предпочтений и предыдущего опыта использования сайта, его настроек и тому подобное. Например, при очередном посещении сайта вы можете скрыть сообщения об ошибках для тех пользователей, которые их уже получали, или сохранить и учитывать пользовательские настройки (например, количество выводимых данных на странице как результат какого-либо поиска).

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

Что такое сессии?

Все взаимодействия между браузерами и серверами осуществляются при помощи протокола HTTP, который не сохраняет своё состояние (stateless). Данный факт означает, что сообщения между клиентом и сервером являются полностью независимыми один от другого — то есть не существует какого-либо представления «последовательности», или поведения в зависимости от предыдущих сообщений. В результате, если вы хотите создать сайт, который будет отслеживать взаимодействие с клиентом (браузером), вам нужно реализовать это самостоятельно.

Сессии являются механизмом, который использует Django (да и весь остальной «Интернет») для отслеживания «состояния» между сайтом и каким-либо браузером. Сессии позволяют вам хранить произвольные данные браузера и получать их в тот момент, когда между данным браузером и сайтом устанавливается соединение. Данные получаются и сохраняются в сессии при помощи соответствующего «ключа».

Django использует куки (cookie), которые содержат специальный идентификатор сессии, который выделяет среди остальных, каждый браузер и соответствующую сессию. Реальные данные сессии, по умолчанию, хранятся в базе данных сайта (это более безопасно, чем сохранять данные в куки, где они могут быть уязвимы для злоумышленников). Однако, у вас есть возможность настроить Django так, чтобы сохранять данные сессий в других местах (кеше, файлах, «безопасных» куки). Но всё же хранение по умолчанию является хорошей и безопасной возможностью.

Подключение сессий

Сессии стали доступны автоматически в тот момент, когда мы создали скелет сайта (во второй части руководства).

Необходимые конфигурации выполняются в разделах INSTALLED_APPS и MIDDLEWARE файла проекта (locallibrary/locallibrary/settings.py), как показано ниже:

= [ ... 'django.contrib.sessions', .... MIDDLEWARE = [ ... 'django.contrib.sessions.middleware.SessionMiddleware', .... 

Применение сессий

Вы можете получить доступ к переменной session , в соответствующем отображении, через параметр request ( HttpRequest передаётся как первый аргумент в каждое отображение). Переменная сессии является связью с определённым пользователем (или, если быть более точным, связью с определённым браузером, который определяется при помощи идентификатора (id) сессии, получаемого из куки браузера).

Переменная (или поле) session является объектом-словарём, который служит для чтения и записи неограниченное число раз. С ним вы можете выполнять любые стандартные операции, включая очистку всех данных, проверку наличия ключа, циклы по данным и так далее. Большую часть времени вы будете тратить на обычные «словарные» операции — получения и установки значений.

Ниже представлены фрагменты кода, которые показывают вам как получать, задавать и удалять некоторые данные при помощи ключа » my_car «, связанного с текущей сессией (браузером).

Примечание: Одной из самых грандиозных вещей в Django является то, что вам не надо думать о механизме, который связывает сессию с текущим запросом в отображении. Во фрагменте ниже, всё что вам надо знать, это то, что my_car связана с тем браузером, который отправил текущий запрос.

# Получение значения сессии при помощи ключа(то есть, 'my_car'). # Если такого ключа нет, то возникнет ошибка KeyError my_car = request.session['my_car'] # Получение значения сессии. Если значения не существует, # то вернётся значение по умолчанию ('mini') my_car = request.session.get('my_car', 'mini') # Передача значения в сессию request.session['my_car'] = 'mini' # Удаление значения из сессии del request.session['my_car'] 

Данное API имеет другие методы, которые большей частью используются для управления куки, связанных с сессией. Например, существуют методы проверки того, что куки поддерживаются клиентским браузером, другие методы служат для установки и проверки предельных дат жизни куки, а также для очистки просроченных сессий из хранилища. Подробное описание API вы можете найти в разделе Как использовать сессии (Django docs).

Хранение данных сессии

По умолчанию Django сохраняет данные сессии в базу данных и отправляет соответствующие куки клиенту только тогда, когда сессия была изменена, или удалена. Если вы обновляете какие-либо данные при помощи ключа сессии, как показано в предыдущем фрагменте, тогда вам не надо беспокоиться о процессе сохранения! Например:

# Данное присваивание распознается как обновление сессии # и данные будут сохранены request.session['my_car'] = 'mini' 

Если вы обновите информацию внутри данных сессии, тогда Django не распознает эти изменения и не выполнит сохранение данных (например, если вы изменили » wheels » внутри переменной » my_car «, как показано ниже). В таких случаях вам надо явно указывать, что сессия была изменена.

# Объект сессии модифицируется неявно. # Изменения НЕ БУДУТ сохранены! request.session['my_car']['wheels'] = 'alloy' # Явное указание, что данные изменены. # Сессия будет сохранена, куки обновлены (если необходимо). request.session.modified = True 

Примечание: вы можете изменить поведение сессий таким образом, чтобы они записывали любое своё изменение в базу данных и отправляли куки, при каждом запросе, путём установки SESSION_SAVE_EVERY_REQUEST = True , в файле настроек проекта (locallibrary/locallibrary/settings.py).

Простой пример — получение числа визитов

В качестве примера из реального мира мы обновим нашу библиотеку так, чтобы сообщать пользователю количество совершенных им визитов главной страницы сайта LocalLibrary.

Откройте /locallibrary/catalog/views.py и добавьте изменения, выделенных жирным, ниже.

def index(request): ... num_authors=Author.objects.count() # The 'all()' is implied by default. # Number of visits to this view, as counted in the session variable. num_visits=request.session.get('num_visits', 0) request.session['num_visits'] = num_visits+1 # Render the HTML template index.html with the data in the context variable. return render( request, 'index.html', context='num_books':num_books,'num_instances':num_instances,'num_instances_available':num_instances_available,'num_authors':num_authors, 'num_visits':num_visits>, # num_visits appended ) 

В первую очередь мы получаем значение ‘num_visits’ из сессии, возвращая 0, если оно не было установлено ранее. Каждый раз при получении запроса, мы увеличиваем данное значение на единицу и сохраняем его обратно в сессии (до следующего посещения данной страницы пользователем). Затем переменная num_visits передаётся в шаблон через переменную контекста context .

Примечание: Можно проверить наличие поддержки куки в браузере (для примера, смотрите Как использовать сессии), или разработать наш UI таким образом, чтобы это не имело значения.

Для показа значения переменной, из следующего фрагмента добавьте нижнюю строчку кода в ваш шаблон главной страницы сайта (/locallibrary/catalog/templates/index.html), в его нижний раздел «Dynamic content»:

h2>Dynamic contenth2> p>The library has the following record counts:p> ul> li>strong>Books:strong>  <num_books >>li> li>strong>Copies:strong>  <num_instances >>li> li>strong>Copies available:strong>  <num_instances_available >>li> li>strong>Authors:strong>  <num_authors >>li> ul> p> You have visited this page  <num_visits >> if num_visits == 1 %> time else %> times endif %>. p> 

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

Итоги

Вы узнали как применять сессии для улучшения взаимодействие с анонимными пользователями.

В наших следующих статьях мы рассмотрим фреймворк аутентификации и авторизации (разрешение доступа, permission), и покажем вам как поддерживать пользовательские аккаунты.

Смотрите также

  • Как использовать сессии (Django docs)
  • Назад
  • Обзор: Django
  • Далее

Что такое сеанс или пользовательская сессия в Google Analytics и «Яндекс.Метрике»

Пользовательская сессия или сеанс – это период времени + последовательность взаимодействий, в течение которого пользователь активен на вашем сайте или в приложении. В разных веб-аналитиках это время может варьироваться. Например, в Google Analytics, по умолчанию, если пользователь неактивен в течение 30 минут и более, любая будущая активность приписывается новому сеансу. А вот пользователи, покидающие ваш сайт и возвращающиеся в течение 30 минут, учитываются как часть исходного сеанса. В «Яндекс.Метрике» визит называется сессией – он завершается, когда время между действиями пользователя, превысило 30 минут – это значение по умолчанию.

Вам может быть интересно:

Не нашли ответ на свой вопрос?

Возможно, вы сможете найти его в нашем блоге TexTerra Daily, или обсудить в соцсетях!

Читать статьи Мы в социальных сетях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *