每次发出AJAX请求时,Laravel 4应用程序都会重置laravel_session COOKIE

时间:2015-07-30 01:03:40

标签: php jquery ajax laravel laravel-4

每次发出AJAX请求时,

Laravel 4应用程序会重置laravel_session COOKIE

当我加载页面时,可能会设置此cookie

laravel_session = 
eyJpdiI6IkJcL1VpcXM5eHRmZkZpMVp6OWw3UDRyV0FZazlGcTA2Y01VYWdHd1wvbndHdz0iLCJ2YWx1ZSI6ImRuOFZsUnhBTnZXVnRkZTluNlJTRjV4eFVzRkRuM25rZU9tQXphYnpsbjV6WE1WV2JpSkJENW9xUVl6WWNxQzArcXNcL29YTitcL2xHa3RXa1NIMTVUSnc9PSIsIm1hYyI6ImEyZDJiMWQ4MWZiNzkyNWFjMDYwZmY0OGFmNzJjZWY5OTcwY2VlMWEwMThiMGMxMWFlYmU0ZmU4MmM4MDgwYmUifQ

从该页面发出1个AJAX请求后,cookie将重置为:

laravel_session = 
 eyJpdiI6IjJITTZlUU9Pc2NTM1Rhd3lweXpHdmh6ZUJzTnZhdlI5WFNTK05pOEhNcFE9IiwidmFsdWUiOiJTcGJ6STN3R2txVnJOQXdKKzFTWGNHSk1Cblk3dkN3bjg0NWVRNmZMbTBJYm9QY3hqcVRSSzg0UlcyYVA3MGFOenR5WHRaNTdpOU54SzNEZTVSMmhwQT09IiwibWFjIjoiNTAwZTE3MGMzZDg5NTRhYWU3YzU1M2YzMWY0YmM4N2I0YzhmMGIyZDE2Y2U2OWNkNDA3NGNmMjBlNjE5MTEzNiJ9

此屏幕截图显示了在发出AJAX请求时发送的网络标签页头: 在图像中,您可以看到AJAX请求正在设置新的cookie值!

enter image description here

我需要弄清楚为什么会话被重置每个AJAX请求以及如何阻止它!

我的路线和过滤器只有基本身份验证,要求用户登录页面,没有什么花哨的

导致问题的基本AJAX请求如下所示:

$.ajax({
    type: 'post',
    url: '/orders/orderboards/order/add-item-comment',
    data: 'order_item_id=' + order_item_id+'&name='+name+'&body='+body+'&user_id='+user_id,
    success: function(result) {
      if(result.success){
        console.log('SUCCESS AJAX Comment created: ');


        working = false;
        $(result.html).hide().insertBefore('#addCommentContainer').slideDown();
        $('#body').val('');

      }else{
        console.log('FAILURE AJAX did not save comment:');
      }

    }
});

与我没有发布表单csrf密钥有什么关系吗?

更新

我在这里描述的https://stackoverflow.com/a/20446415/143030中添加了CSRF,它将标记添加为标头元标记,然后在AJAX请求中发送它。我还更新了我的Filter.php,如图所示......

AJAX使用......

$.ajaxSetup({
    headers: {
        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
    }
});

头文件获取......

<meta name="csrf-token" content="<?= csrf_token() ?>">

过滤器得到...... 您还需要修改CSRF过滤器以检查ajax请求标头以及默认的Input :: get(&#39; _token&#39;)...

Route::filter('csrf', function()
{
   $token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');
   if (Session::token() != $token) {
      throw new Illuminate\Session\TokenMismatchException;
   }
});

0 个答案:

没有答案