Схема аутентификации с помощью сессий

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

У нас получается стандартная схема клиент-сервер. Клиент здесь, как правило, браузер. Сервер - какой-то веб-сервер, который принимает запросы: Apache, Nginx и так далее. То есть, это какой-то веб-сервер, который у нас будет всё это принимать, и на этом веб-сервере есть некая база данных, в которой хранятся пользователи. 

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

Как происходит процесс аутентификации

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

О Session ID

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

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

По умолчанию сервер хранит данные на диске в какой-то служебной папке, обычно это папка temp текущего пользователя, временные файлы. Там какие-то служебные файлы будут, нам их смотреть совершенно необязательно. По своим внутренним алгоритмам веб-сервер или другой веб-сервер, который используется, складывает эти сессии туда. Соответственно, по этой Session ID он сможет найти информацию о пользователе.

Единственное, что делает сервер после того, как он сохранил данные, - возвращает этот Session ID клиенту, в данном случае браузеру. Браузер сохраняет её у себя во внутренней памяти. 

Теперь при каждом запросе этот Session ID будет передаваться, то есть в HTTP-запросе в служебных заголовках этот Session ID будет передаваться.

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