Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';在ajax调用中不读取会话_Php_Ajax_Laravel_Laravel Session - Fatal编程技术网

Php Can';在ajax调用中不读取会话

Php Can';在ajax调用中不读取会话,php,ajax,laravel,laravel-session,Php,Ajax,Laravel,Laravel Session,在ajax调用之后,我正在努力处理丢失的会话。通常,在加载页面时,我会在调试栏中看到所有会话: 我当然对卡蒂德感兴趣。如果会话存在,我想使用它将产品添加到具有$cartId的给定购物车中。 下面是简单的ajax: window.addEventListener('DOMContentLoaded', function () { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').at

在ajax调用之后,我正在努力处理丢失的会话。通常,在加载页面时,我会在调试栏中看到所有会话:

我当然对卡蒂德感兴趣。如果会话存在,我想使用它将产品添加到具有$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');
});
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中获取会话吗?

尝试使用该方法操作会话CartController@addProductToCart而不是在控制器构造函数中。我有一个项目,我用ajax调用将文章放在会话卡中,效果很好。也许,这就是解决方案

当您在
cart/add product
方法中使用代码而不是构造函数时会发生什么?我已经从类中删除了所有内容,并在addProductToCart中使用了print\r(session::all())并加载了会话。嗯,所以构造函数肯定有问题。谢谢你的主意!因为5.3会话在构造函数中不显式可用。您应该在方法本身中检索它。不过,还有解决方法,请检查。感谢您共享此信息。我花了两个小时来解决这个问题。。。现在,一切都运转正常。非常感谢你的帮助。祝你有愉快的一天。