Как исправить истечение сеанса при работе в 2 вкладках — Laravel 5.7

#php #laravel

#php #laravel

Вопрос:

Я использую Laravel 5.7 и использую систему аутентификации (из php artisan make: auth).Предположим, в браузере у меня есть 2 вкладки. На первой вкладке я установил кнопку использовать ajax для отправки запроса на сервер и успешного ответа, но когда открываю вторую вкладку и выполняю выход (или login), затем возвращаюсь на первую вкладку (без перезагрузки первой вкладки), пытаюсь выполнить с помощью кнопки отправить запрос, ответом теперь является статус ошибки 419.

Я думаю, есть какая-то проблема с истечением сеанса. Я искал, но нигде мне не стало хорошо.

 // tab 1

// front-end js
$("#button").click(function(){
   $.ajaxSetup({
      headers: {
        "X-CSRF-TOKEN": $("meta[name='csrf-token']").attr("content")
      }
  });
  $.ajax({
    url: "{{ route('test.post') }}",
    type: "post",
    dataType: "json",
    success: function(response){
        console.log(response);
    },
    error: function(){
        alert("error");
    }
 });
});

//server code
    public function post(Request $request){
        if(Auth::check()){
            return response()->json(["test" => 1]);
        }else{
            return response()->json(["test" => 0]);
        }
    }
// first click in tab 1: working normal
// turn on another tab a do log out or log in
// comeback tab 1 and click button: error with 419 status code ???
  

Теперь я хочу, чтобы после входа в систему или выхода из системы на другой вкладке я все еще мог нажимать кнопку, работающую нормально. Если не удается, есть ли какое-либо решение для сохранения подключения к серверу с помощью ajax, axios … (что-то в этом роде)… для обновления данных во внешнем интерфейсе. Большое вам спасибо

Комментарии:

1. ваш сеанс работает для каждого клиента, а не для каждой вкладки. таким образом, вы не можете выйти из системы на одной вкладке и ожидать, что вы не выйдете из системы на другой вкладке.

Ответ №1:

Laravel использует токены csrf для защиты вашего приложения от атак с подделкой межсайтовых запросов (CSRF). У каждой сессии появляется новый csrf-токен. В вашем случае вы используете 2 вкладки, на второй вкладке вы выполняете вход в систему и выход из системы. Итак, после входа / выхода из системы ваш csrf-токен истек для вкладки 1, вам нужно обновить эту вкладку, чтобы вы могли получить новый csrf-токен для сеанса. Или вы можете исключить свой маршрут из защиты csrfhttps://laravel.com/docs/5.8/csrf#csrf-excluding-uris просто добавьте свой маршрут в app / Http / Middleware /VerifyCsrfToken $except array.