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