无法读取Ajax通话中的会话

时间:2019-03-19 08:07:16

标签: php ajax laravel laravel-session

在ajax调用后,我正在为缺少会话而苦苦挣扎。通常,加载页面时,我会在调试栏中看到所有会话:

enter image description here

我当然对cartId感兴趣。如果存在会话,我想使用它将产品添加到具有$ cartId的指定购物车中。 这是简单的ajax:

window.addEventListener('DOMContentLoaded', function () {
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$(".buyButton").click(function () {
    addProductToCart($(this).data('id'));
});

function addProductToCart(id_product) {
    var path = 'cart/add-product';
    $.ajax({
        type: 'post',
        url: path,
        dataType: 'JSON',
        data: {
            id_product: id_product,
        },
        success: function (data) {
            alert('added!');
        },
        error: function (ajaxContext) {
            alert(ajaxContext.responseText);
        }
    });
}

});

CartController

class CartController extends Controller
{
    public $cartId;

    public function __construct()
    {
        print_r(session::all());
        $this->cartId = $this->getCartId();
        session::put('something',123);
    }
    //REST OF CODE REMOVED 
}

为了清楚起见,我从控制器中删除了其他方法。那里没什么特别的。基本上session :: all会一直返回空数组。另外,我从控制台添加屏幕: enter image description here

路线:

Route::group(["namespace" => 'Controllers\FrontEnd', "middleware" => 'web'], function () {
        Route::post('/cart/add-product', 'CartController@addProductToCart');
});

Kernel.php

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
             \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\LanguageSwitcher::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
];

基本上,我无法在ajax上获得现有会话,但是当我在ajax中设置名为“某物”的新会话时,该会话将存在并持续存在。我已经阅读了许多有关该问题的主题,通常问题是缺少中间件=> Web。我添加了中间件并清除了所有缓存,但是没有运气。

有人对如何在ajax中进行会话有任何想法吗?

1 个答案:

答案 0 :(得分:1)

尝试在方法 CartController @ addProductToCart 中而不是在控制器构造函数中操作会话。我有一个项目,我将文章放入带有ajax调用的会话卡中,并且工作正常。也许是解决方法