Как отловить сессию при выполнении php скрипта через ajax-запрос?

На сайте использую сессии для авторизации пользователей. В профиле пользователя, если он является администратором, есть кнопка, при нажатии на которую отправляется ajax-запрос к php-скрипту, который что-то исполняет. Дабы обезопасить все это (данное действие должен выполнять только администратор), я хочу передавать данные из сессии, в которой хранится ID пользователя, после чего его проверят. Передавать его через JS особо смысла не вижу, потому что можно переписать свой пользовательский скрипт с нужным ID, поэтому задача стоит грамотно отлавливать параметр сессии, чтобы на самом сервере ее проверять. Как это можно сделать?
  • Вопрос задан
  • 737 просмотров
Решения вопроса 3
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
ajax от не ajax ничем не отличается, в чем проблема работы с сессией как обычно? Хотя бы попробовали прежде чем вопрос задавать.

Токен придумывают когда через ajax пинают api в котором сессий нет в принципе, поэтому авторизация возможна только альтернативными путями в виде токенов.
Ответ написан
proudmore
@proudmore
Сделайте уникальный токен на каждого юзера, и передавайте его клиенту вместо ID. По токену вы сможете определить пользователя, а значит, и права на выполнение действия. Подобрать токен сложнее во много порядков, чем ID. Проблема тем самым снята.
UPD. Вообще, если на сервере включены сессии, то на каждого юзера генерится PHPSESSID, который кладется в cookie. Этот ID - это название файла, который лежит в ФС сервера. В этом файле сериализовано все, что в ходе работы записал туда пых. Т.е. если у пользователя такой куки нет, или она не валидна, то и в сессии для него ничего нет. Соответственно, user_id хранится в сессии, и доступ к ней клиент получает через куку с идентификатором сессии.
Ответ написан
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
поэтому задача стоит грамотно отлавливать параметр сессии, чтобы на самом сервере ее проверять. Как это можно сделать?

if($_SESSION['admin']) // ну или как вы там проверяете на админа
{
       var_dump($_SESSION['paramName']);
}

в данном случае код на аякс-запрос (и не аякс) отдаст значение парамтера 'paramName', который в сессиии только, если пользователь залогинен
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы