0

ajax 呼び出し後にセッションが失われるのに苦労しています。通常、ページが読み込まれると、デバッグバーにすべてのセッションが表示されます。

ここに画像の説明を入力

もちろん、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);
        }
    });
}

});

カートコントローラー

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 は常に空の配列を返します。さらに、コンソールから画面を追加しています: ここに画像の説明を入力

ルート:

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

カーネル.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 でセッションを取得する方法について誰かアイデアがありますか?

4

1 に答える 1

1

コントローラー コンストラクターではなく、メソッドCartController@addProductToCartでセッションを操作してみてください。ajax呼び出しを使用して記事をセッションカードに入れるプロジェクトがあり、正常に動作します。たぶん、それが解決策です

于 2019-03-19T10:21:09.027 に答える