【问题标题】:csrf token missmatch after long time长时间后的 csrf 令牌不匹配
【发布时间】:2019-11-19 22:31:47
【问题描述】:

我们有一个自定义的登录弹出模型。 我们用户点击登录然后弹出窗口进入图片。 csrf-token 生成,但是当他什么都不做时,一段时间后会发生令牌不匹配。并抛出异常。 我需要一些想法来在一段时间后刷新令牌,否则它永远不会过期。

你能帮帮我吗?

【问题讨论】:

  • 欢迎来到 StackOverflow!请分享您尝试过的相关代码和/或步骤。

标签: php session laravel-5 csrf


【解决方案1】:

默认会话时间为 120 分钟,可在 .env 文件中使用SESSION_LIFETIME 进行配置。

您可以执行以下操作之一:

a) 将 SESSION_LIFETIME 设置为非常高的数字,例如 35791394(68 岁)
b) 当用户打开网站时,启动一个javascript计时器,在SESSION_LIFETIME分钟后刷新页面

【讨论】:

    【解决方案2】:

    要在某个时间刷新令牌,您可以这样做:

    <html>
    <head>
        <title>My website </title>
    </head
    <body>
    <form method="POST" action="#">
        <input type="hidden" name="_token" id="csrf-token" value="{{ csrf_token() }}" />
    </form>
        <script type="text/javascript">
            var csrfToken = $('#csrf-token').val();
    
            setInterval(refreshToken, 3600000); // 1 hour 
    
            function refreshToken(){
                $.get('refresh-token').done(function(data){
                    csrfToken = data; // the new token
                });
            }
    
            setInterval(refreshToken, 3600000); // 1 hour 
    
        </script>
    </body>
    </html>
    

    在您的路线文件中:

    Route::get('refresh-token', function(){
        return csrf_token();
    });
    

    使用来源:https://stackoverflow.com/a/31451123/3963382

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2020-07-08
      • 2016-12-10
      • 2016-09-20
      • 2017-09-01
      相关资源
      最近更新 更多