Задать вопрос
dart_kinselok
@dart_kinselok
Правильный вопрос содержит 50% искомого ответа...

Беда в связке AJAX + SESSION, что мешает?

Если коротко и популярно:
Есть проект под Yii2. Соответственно, сам фреймворк автоматом запускает сессию перед инициализацией контролелров. Есть страница, с которой AJAX-запрос отправляется на страницу #2, где данные обрабатываются и устанавливается сессия с определенным содержимым. После того, как первая страница получает ответ, она AJAXом же обновляет часть страницы, использующую сессию, установленную на странице #2. Но, увы, сессия пустая. Дебаггер говорит, что сессия была успешно утановлена на второй странице, она спокойно выводилась в отладочной информации с теми данными, которые были в нее "завернуты". Но. Первая страница в упор не видит ее. Даже после обновления - массив сессий пуст.

Есть предложения/предположения, можно ли вообще такое вершить? Благодарю.
----------------------
UPD: Потребовали код, привожу. AJAX на первой странице:
$.post(
            '/ajax/login',
            {
                email: $('#auth_mail').val(),
                password: $('#auth_pass').val()
            }, function (data) {
                      // Тут я вершу свои грязные делишки после получения ответа.
            }
        );


Контроллер, получающий сие чудо (упрощен, то, что писал в модели сразу перенес сюда, дабы сэкономить время):

public function actionLogin()
    {
        $user = User::findOne(['email' => $_POST['email']]); // ActiveRecord Query
        if(!$user)
            return false;

        return $user->password === md5($_POST['password']) ? $_SESSION['auth'] = true : false;
    }
  • Вопрос задан
  • 1452 просмотра
Подписаться 1 Оценить 8 комментариев
Решения вопроса 1
dart_kinselok
@dart_kinselok Автор вопроса
Правильный вопрос содержит 50% искомого ответа...
Осуществил через Yii::$app->session с некоторыми костылями - заработало. Спасибо за помощь, господа!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
1. мало кода, как для 2-х страниц
2. Почему не использовать yii если Вы его используете?
yii::$app->session->set()
и
yii::$app->request->post()
3. Вы избавились от CSRF token да еще и при авторизации - это впринципе дыра в защите, но кроме этого Ваш экшен может не работать. Так как по умолчанию в yii2 все post запросы проходят проверку CSRF. Если Вы посмотрите дебаг, там скорее всего есть инфа, что post запрос не прошел проверку. Поэтому и не работает ничего.
Ответ написан
Комментировать
@melnikov_m
попробуйте в init контроллера сделать примерно следующее, чтобы проверить гипотезу о csrf

public function init()
    {
        parent::init();
        $this->controller->enableCsrfValidation = false;
        Yii::$app->response->format = Response::FORMAT_JSON;
    }

Форма не обязательно JSON - выберете любой удобный вам
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Возможно надо сделать так.
public function actionFirst()
{
   $session = Yii::$app->session;
   
   /* выполняете какие-то проверки и заносите данные в сессию */
  if(*****){
     $session->set('name', $this->name);
  }

}

public function actionSecond()
{
  $session = Yii::$app->session;
  
  return $session->get('name');
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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