Флеш-сообщения не исчезают PHP

Я использую этот скрипт Flash Messages для простой системы перенаправления и прошивки. На моем локальном хосте apache все работает нормально, но как только я загружаю его на сервер (также apache), он не работает. Он устанавливает сеансы, а также правильно отображает сообщения, но впоследствии не сбрасывает сообщения. Теперь у меня есть целая куча "флеш-сообщений" на моем сайте, и они будут получать все больше и больше, если вы не закроете свой браузер, чтобы принудительно сбросить все сеансы.

Я уже читал документацию тысячу раз, а также искал в скрипте Flash-сообщений на сервере ошибки. Я не мог найти ни одного.

Может быть, вы, ребята, можете мне помочь. Хост, на котором я разверну свой сайт, это strato.com.

Изменить: я нашел файл cookie с именем PHPSESSID в информации моего браузера. Может быть, это может быть полезно.

Конструктор:

    public function __construct()
{

    // Generate a unique ID for this user and session
    $this->msgId = sha1(uniqid());

    // Create session array to hold our messages if it doesn't already exist
    if (!array_key_exists('flash_messages', $_SESSION)) $_SESSION['flash_messages'] = [];

}

Очистить функцию сессии:

    protected function clear($types=[])
{
    if ((is_array($types) && empty($types)) || is_null($types) || !$types) {
        unset($_SESSION['flash_messages']);
    } elseif (!is_array($types)) {
        $types = [$types];
    }

    foreach ($types as $type) {
        unset($_SESSION['flash_messages'][$type]);
    }

    return $this;
}

Добавить сеансы:

    public function add($message, $type=self::defaultType, $redirectUrl=null, $sticky=false)
{

    // Make sure a message and valid type was passed
    if (!isset($message[0])) return false;
    if (strlen(trim($type)) > 1) $type = strtolower($type[0]);
    if (!array_key_exists($type, $this->msgTypes)) $type = $this->defaultType;

    // Add the message to the session data
    if (!array_key_exists( $type, $_SESSION['flash_messages'] )) $_SESSION['flash_messages'][$type] = array();
    $_SESSION['flash_messages'][$type][] = ['sticky' => $sticky, 'message' => $message];

    // Handle the redirect if needed
    if (!is_null($redirectUrl)) $this->redirectUrl = $redirectUrl;
    $this->doRedirect();

    return $this;
}

1 ответ

Я починил это. Это произошло из-за изменений в PHP 7.1 в файле php.ini. Как только я снизил версию PHP до PHP 7.0, все снова заработало.

Я надеюсь, что это поможет многим людям. По крайней мере, теперь у вас есть отправная точка.

Другие вопросы по тегам