yii2-app-basic icon indicating copy to clipboard operation
yii2-app-basic copied to clipboard

Виджет Alert работает неверно

Open wartur opened this issue 5 years ago • 5 comments

Дело в том, что он всегда стартует сессию. А это неверное поведение. Мое мнение, что не нужно запускать сессию, если на то нет явных причин.

На строке 52 https://github.com/yiisoft/yii2-app-basic/blob/master/widgets/Alert.php#L52

Требуется за место

$session = Yii::$app->session;

Напиасть:

$session = Yii::$app->session;
if (empty($session->getHasSessionId())) {
    return null;
}

Тогда все будет работать отлично!

wartur avatar Jul 04 '20 21:07 wartur

You can use Alert without session in \yii\bootstrap\Alert::widget. In the code you link to it is required, as it is used for Flash Messages.

YiiRocks avatar Jul 05 '20 00:07 YiiRocks

As @Thoulah noted, it won't work because it needs session to read flash messages.

samdark avatar Jul 07 '20 21:07 samdark

@samdark Я понимаю, что требуются сессии. Может быть меня не правильно поняли? Соль состоит в том, что, если нет сессионной куки, то её не нужно стартовать вхолостую. У меня тут 300к обращений в сутки от поисковых движков, зачем мне нужно держать в базе данных лишних 13 тысяч гарантированно холостых сессий в час?

Если нет Сесссионной куки, значит и Алертов нет. Все. Все логично.

По сути говоря, Yii::$app->user->isGuest работает абсолютно верно, там сначала идет проверка того, есть ли сессионная кука, если есть, то он идет дальше, иначе стопится НЕ стартуя сессию. Тоже самое надо реализовать в этом шаблоне и все.

Кстати я помню, что именно я этот баг в свое время находил именно внутри фреймворка, а тут тоже самое только с виджетом, ну не надо сессию дергать и стартовать без надобности. https://github.com/yiisoft/yii2/issues/13059

wartur avatar Jul 07 '20 22:07 wartur

Оно фейлит тесты в advanced как минимум...

samdark avatar Jul 08 '20 18:07 samdark

Можно написать так например:

        $session = Yii::$app->session;
        if (!$session->getIsActive()) {
            return null;
        }

pyostrike avatar Oct 19 '22 23:10 pyostrike