@lolka02

Почему не работает куки (Yii2)?

На domain1.com вставлю js код который отправляет аякс запрос на domain2 , и там устанавливаю куки, он не устанавливается, точнее устанавливается каждый раз новый, а мне надо установить один раз и получиться данные в дальнейшем

public function getCookieName()
    {
        return md5('model_Widget_' . $this->id); 
    }

public function getCookie()
    {
        $cookieName = $this->cookieName;
        $value = null;

        $cookies = Yii::$app->request->cookies;
        if (!$cookies->has($cookieName)) {
            $value = 'test';
            Yii::$app->response->cookies->add(new \yii\web\Cookie([
                'name' => $cookieName,
                'value' => $value,
                'expire' => time() + 3600 * 24 * 365 * 10
            ]));
        } else {
            $value = $cookies->get($cookieName);
        }

        return $value;
    }


в контроллере есть выборка $model = Widget::findOne($id)
дальше уже при выборе $model->cookie должен возвращать ранее установленный куки

ajax
$.ajax({
             url: '//domain2.com/get-widget',
             data: {project: 1},
             type: 'post',
             crossDomain:true,
             async:true,
             dataType: 'json',
             success: function (data, status) {
                     if (data.status == 'ok') {
                         $('body').append(data.html)
                     }
             }
         })


на вопрос для чего нужны куки - надо выводить виджет по определенным настройкам, допустим надо засекать время первого входа посетителя на сайт, дальше уже через определенное время после первого входа выводить этот виджет
  • Вопрос задан
  • 417 просмотров
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Попробуйте изменить dataType в ajax запросе на "jsonp"
$.ajax({
             url: '//domain2.com/get-widget',
             data: {project: 1},
             type: 'post',
             crossDomain:true,
             async:true,
             dataType: 'jsonp',
             success: function (data, status) {
                     if (data.status == 'ok') {
                         $('body').append(data.html)
                     }
             }
         })

JSONP
Хотя, я думаю, это не лучшее решение.
В Yii2 есть фильтр Cors. Возможно Вам поможет.
https://ru.wikipedia.org/wiki/Cross-origin_resourc...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы