无法读取 ajax 通话中的会话
Can't read sessions in ajax call
我正在为 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 returns 整个时间都是空数组。另外我从控制台添加屏幕:
路线:
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 中设置名为 "something" 的新会话时它将存在并坚持。我已经阅读了很多关于这个问题的主题,通常问题是缺少中间件 => web。我添加了中间件并清除了所有缓存,但没有成功。
有人知道如何在 ajax 中获得会话吗?
尝试在方法 CartController@addProductToCart 中而不是在控制器构造函数中操作会话。我有一个项目,我通过 ajax 调用将文章放入会话卡中,并且工作正常。也许,这就是解决方案
我正在为 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 returns 整个时间都是空数组。另外我从控制台添加屏幕:
路线:
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 中设置名为 "something" 的新会话时它将存在并坚持。我已经阅读了很多关于这个问题的主题,通常问题是缺少中间件 => web。我添加了中间件并清除了所有缓存,但没有成功。
有人知道如何在 ajax 中获得会话吗?
尝试在方法 CartController@addProductToCart 中而不是在控制器构造函数中操作会话。我有一个项目,我通过 ajax 调用将文章放入会话卡中,并且工作正常。也许,这就是解决方案