powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Вопрос по сессиям
9 сообщений из 9, страница 1 из 1
PHP: Вопрос по сессиям
    #39928751
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите разобраться, как правильно использовать сессии.
У меня есть трехсторонняя система: Пользователь - Сайт - Сервис.
Пользователь авторизуется на Сайте, после успешной авторизации у Сайта есть его учетное имя (username).
Часть данных Сайт получает с Сервиса, при этом состав данных зависит от Пользователя.
Сайт передает на Сервис учетное имя пользователя, получает токен и использует этот токен в последующих запросах.
Токен действует несколько часов. Как можно "закешировать" токен на срок его действия, чтобы не запрашивать каждый раз?

Я в общих чертах представляю себе это так:
Код: php
1.
2.
3.
4.
5.
6.
7.
if (isset($_SESSION, $_SESSION[$username], $_SESSION[$username]['token'])) $token = $_SESSION[$username]['token'];
if (isset($token)) {
  if (!$api->check($token)) $token = null;
}
if (!isset($token)) {
  $token = $api->auth($username);
}



Все верно?
Или сессии и так будут уникальны для каждого посетителя и можно использовать сразу $_SESSION['token'] ?
Или все делается по другому?
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928783
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут много зависимостей, которые не раскрыты. Механизм сессий может быть очень сильно разным. Начиная от простейшего штатного, где сессия прекращается через 1440 секунд бездействия (заметьте, это много менее нескольких часов действия токена) и до навороченного с "вечным" хранением пользовательских данных в БД.
В последнем случае токен, привязанный к юзернейму вполне можно хранить в пользовательской сессии.
Если же использован простой механизм сессий, а токен привязан к юзернейму, то и хранить его где-то в таблице свойств юзера есть смысл. Впрочем, несложно заметить, что и первый и второй вариант по сути хранят токен в базе.
Ну и вариант, когда токен выдается Сайту... Понятно, надеюсь, что хранить такой токен есть смысл на уровне свойств/настроек сайта.
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928828
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, у меня используется простой (встроенный в PHP) механизм сессий.
То есть сессии — это глобальное (на уровне всего сайта) хранилище, а не свое для каждого посетителя?
Мне откуда-то вспоминалось, что сессии каждого посетителя изолированы от чужих.

Что касается того, кому принадлежит токен — то явно не Сайту, потому что Сервис по токену возвращает свои данные для каждого Пользователя.
Но токен не совсем и Пользователя — если на Сайте будет несколько Пользователей, использовавших для авторизации одно и то же учетное имя, то на них всех будет один токен.
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928836
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
То есть сессии — это глобальное (на уровне всего сайта) хранилище, а не свое для каждого посетителя?
Хранилище сессий глобальное, конечно. Бывает глобальное для сайта, unix-аккаунта, сервера - это уж как настроено.
Каждая сессия в простом варианте уникальна для посетителя и ее имя (и имя файла для хранения данных) явно привязано к куке, которую получает/присылает пользователь.

Alibek B.
если на Сайте будет несколько Пользователей, использовавших для авторизации одно и то же учетное имя, то на них всех будет один токен.
Где-то на сайте есть таблица пользователей с их учетными именами? Можно там, в принципе, хранить.
Или вот еще хороший вариант - можно мемкеш задействовать для хранения. Запоминать в нем пару варнейм=>токен (где варнейм содержит учетное имя пользователя) на время равное или чуть менее времени годности токена. Притом, логика простая получается. Если мемкеш вернул данные - использовать их, если не вернул - запрашивать токен, сохранять его и использовать в текущем обращении.
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928866
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle
Где-то на сайте есть таблица пользователей с их учетными именами?

Не совсем.
На Сайте используется HTTPS и клиентские сертификаты.
Проверка сертификата (кем и для кого выпущен) осуществляется на уровне самого веб-сервера.
А те сертификаты, что прошли проверку, попадают на Сайт и Сайт использует прописанный в них логин (учетное имя Пользователя).
Но дополнительно этот логин проверяется на Сервисе — сертификат должен быть валидный, но кроме того сертификат должен быть разрешен к использованию. Сервис сообщает Сайту результат проверки сертификата, а также уровень доступа Пользователя данного сертификата.
Вот чтобы упростить эту проверку, я и хочу сделать ее один раз, сопоставить с токеном и в дальнейшем использовать токен для проверки доступа.
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928889
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух, как завернули!

У сертификата, по идее, должен быть свой срок годности. А ещё его можно отозвать досрочно. И совсем не обязательно то и другое должно превышать срок годности токена.

Другими словами, не получится ли так, что сертификат уже непригоден, а токен вполне себе живой. Наверно, этот момент тоже как-то следует учесть. С плановым окончанием срока годности вполне понятно. Но как учесть досрочный отзыв сертификата без дополнительного обращения к Сервису?
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928906
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle
Другими словами, не получится ли так, что сертификат уже непригоден, а токен вполне себе живой.

Нет, не получится.
Если сертификат просрочен или отозван, то он даже до PHP не дойдет, его веб-сервер отклонит.
Отзыв сертификата — это добавление его в CRL на веб-сервере, вполне штатная задача.
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928917
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда для чего эту проверку замутили?
Alibek B.
Сайт использует прописанный в них логин (учетное имя Пользователя).
Но дополнительно этот логин проверяется на Сервисе — сертификат должен быть валидный, но кроме того сертификат должен быть разрешен к использованию.
...
Рейтинг: 0 / 0
PHP: Вопрос по сессиям
    #39928928
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, доступ пользователя может быть отключен или приостановлен (при том, что сертификат не отзывается).
Во-вторых, на сертификате не прописаны уровни доступа, там только аутентификация, но не авторизация.
Уровни доступа определяются при проверке, но их можно считать неизменными и проверять/узнавать только однажды.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Вопрос по сессиям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]