Используйте Выходной класс . Из руководства пользователя:
$ this-> output-> set_status_header (code, 'text');
Позволяет вам вручную установить заголовок состояния сервера. Пример:
$this->output->set_status_header('401');
// Sets the header as: Unauthorized
Я собирался предложить расширить класс Security и переписать функцию, которая генерирует ошибку CSRF:
/**
* Show CSRF Error
*
* @return void
*/
public function csrf_show_error()
{
//show_error('The action you have requested is not allowed.');
// Set 401 header instead of the default 500
show_error('The action you have requested is not allowed.', 401);
}
... но это не всегда будет правильно - И самое главное, я не думаю, что вам нужно делать это при отправке токена. Вы должны были уже отправить неавторизованный заголовок до того, как токен был даже проверен.
Из вашего комментария:
Не то, чтобы токен csrf и сеанс были напрямую связаны, но срок действия по умолчанию для обоих одинаков. Так что, если пользователь не обновил свой браузер некоторое время, а затем обновил страницу, CI возобновит сеанс и токен csrf .... но с помощью ajax, поскольку он не может обновить токен, он просто возвращает ошибку 500 ,
Если это единственное, что мешает вам проверить сеанс до токена CSRF, попробуйте установить срок действия токена сеанса на 10 секунд раньше, чем токен. Если запрос не авторизован, нет смысла проверять токен для начала.