繁体   English   中英

在2个选项卡中工作时如何修复会话过期 - Laravel 5.7

[英]How to fix session expired when working in 2 tabs - Laravel 5.7

我正在使用Laravel 5.7,并使用Auth系统(来自php artisan make:auth)。在浏览器中我有2个标签。 在第一个选项卡中,我设置了一个按钮,使用ajax向服务器发送请求并响应成功,但是当打开第二个选项卡并执行注销(或登录)然后返回第一个选项卡(不重新加载第一个选项卡)尝试使用按钮来发送请求,现在响应是错误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 ...(类似的东西)保持连接到服务器...更新前端的数据。 非常感谢你

Laravel使用csrf令牌来保护您的应用程序免受跨站点请求伪造(CSRF)攻击。 每个会话都有新的csrf-token。 在您的情况下,您使用2个选项卡,在第二个选项卡上,您可以登录和注销。 因此,在登录/注销后,csrf-token对于选项卡1已过期,您必须刷新该选项卡,以便为会话获取新的csrf-token。 或者你可以从csrf保护中排除你的路由https://laravel.com/docs/5.8/csrf#csrf-excluding-uris只需在app / Http / Middleware / VerifyCsrfToken $中添加你的路由除了数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM