Я использую сеансы для отправки переменных через формы, чтобы безопасно удалить записи на сервере. Все работает просто отлично
Однако после перенаправления это не работает, если я не обновлю страницу перед удалением. Несмотря на то, что сеанс снова создается после перенаправления (я уже проверил, что это работает нормально), когда я снова отправляю форму удаления, сеанс не сохраняется в файле, который обрабатывает форму.
Кто-нибудь имеет представление о том, что может происходить?
Как я устанавливаю сессию:
$token = SessionManager::setTokenForForm('delete-' . $row->id, $values);
echo '<form method="post" action="' . FrontendConstants::$BASE_URL . FrontendConstants::$DELETE_RECORD_URL . '">';
echo ' <input type="hidden" name="token" value="' . $token . '"/>';
echo ' <input type="hidden" name="redirect_url" value="' . $fullRedirectUrl . '"/>';
echo ' <input type="hidden" name="id" value="' . $row->id . '"/>';
echo ' <input type="submit" class="btn btn-default" value="Delete"/>';
echo ' </form>';
Функция setTokenForForm:
public static function setTokenForForm($form, $values = null) {
$token = uniqid();
if (!isset($_SESSION)) {
session_start();
}
$session = array();
$session['token'] = $token;
if ($values != null) {
$session['values'] = $values;
} else {
$session['values'] = array();
}
$_SESSION[$form] = $session;
return $token;
}
На delete.php, который является файлом, вызываемым формой, после просмотра сеанса и удаления элемента я перенаправляю на предыдущую страницу:
header('Location: ' . $redirect_url);
Задача ещё не решена.
Других решений пока нет …