Я использую класс сообщений на основе флэш-памяти для предоставления пользовательских сообщений.
На определенной странице под названием «Резервное копирование» пользователь может восстановить резервную копию, и она выполнит восстановление, а затем выполнит следующие действия (пользовательские функции говорят сами за себя):
ASSession::destroySession();
ASSession::startSession();
$mg = new Messages();
$mg->add('s', $prepend);
redirect("login.php");
Проблема, как я увидел, заключалась в том, что когда мы уничтожаем сеанс, мы должны начать новый, чтобы отображались сообщения (которые используют переменные сеанса для хранения сообщений). Тем не менее, как только пользователь попадает на страницу входа в систему после перенаправления, страница вызывает основной «каркасный» файл, который также вызывает ASSession::startSession()
, Поэтому я решил, что сначала проверим, есть ли у нас идентификатор сеанса в startSession()
функция, так как мы должны были начать сеанс до перенаправления, поэтому нет необходимости начинать новый сеанс, когда мы достигаем входа в систему, поскольку это также удалит сообщение, прежде чем пользователь сможет его просмотреть.
Итак, я сделал это изменение:
public static function startSession()
{
if (!session_id()) {
ini_set('session.use_only_cookies', SESSION_USE_ONLY_COOKIES);
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], SESSION_SECURE, SESSION_HTTP_ONLY);
session_start();
//session_regenerate_id(SESSION_REGENERATE_ID);
}
}
Но безрезультатно. Я запустил всю находку для всего сайта session_start()
чтобы увидеть, начиналось ли оно где-то еще, не проверяя, началось ли оно уже и что получилось отрицательным. Итак, мой вопрос: почему мой сеанс перезапускается после того, как я его запустил, если единственная функция, которая занимается запуском сеанса, проверяет, запущен ли сеанс в данный момент? Потому что мои сообщения не отображаются 🙁
Примечание: я стараюсь избегать страшных ?success='It worked'
а также echo $_GET['success'];
Задача ещё не решена.
Других решений пока нет …