Ajax POST 未被识别为当前访客 session、Laravel 5.3 的一部分

Ajax POST not recognised as part of current guest session, Laravel 5.3

我有一个页面,打开后,将一系列 ajax post 发送到通知端点。我想使用访客 session 在 post 中持久保存数据。无需登录,但无论如何都可以进行上下文控制。我正在使用 cookies。

我在从 session 恢复 objects 时遇到问题是这些 ajax 请求(它们变为空),我注意到在每个 post通知端点,我得到了 request()->session()->getId() 的不同值,这让我觉得 session 没有被正确传达,这就是为什么我没有看到我期望看到的 objects 持续存在的原因。

我的网址正在使用 "web" 中间件。

每次打开页面我都会:

<script>
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': '<?php echo csrf_token(); ?>'
        }
    });
</script>

确保 ajax 请求将在 header

中包含 CSRF 令牌

每次打开页面(不在通知中)时,我也会执行“request()->session()->regenerate();”以确保新的 session.

我是否应该在 POST 中发送任何其他内容(可能从 cookie 传递值)以将请求识别为上下文的一部分?

你应该让它成为无状态的。

  • 从客户端向服务器发送请求
  • 服务器生成并returns一个"token"
  • 客户端接收令牌并将其存储在例如本地存储中
  • 客户端随每个请求发送令牌作为 header(或作为 URL 中的参数)
  • (服务器检查来自 header 的令牌)

优势是您可以独立 session 处理。

        var _id     = 1011;
        var url     = "/test";

        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            beforeSend: function(){

            },
            url: url,
            data: {id: _id},
            type: 'POST',
            dataType: 'json',
            success: function(result){

            }
        });