/ / Yii2 cria nova sessão em vez de abrir existente - php, session, yii, yii2

Yii2 cria nova sessão em vez de abrir existente - php, session, yii, yii2

Eu estou trabalhando em uma lógica simples de armazenar meu carrinho de compras em sessão usando o Yii2 nativo yiiwebSession. Toda vez que eu adiciono um item a um carrinho, eu chamo um método:

public function actionAdd( ) {

$id = Yii::$app->request->get("id");
$product = Product::findOne($id);

$session = Yii::$app->session;
$session->open();

$cart = new Cart();
$cart->addToCart($product);

$this->layout = false;
return $this->render("cart-modal", compact("session"));
}

esse método funciona com um modelo de carrinho e adiciona meu item à sessão:

public function addToCart($product, $qty = 1) {

if(isset($_SESSION["cart"][$product->id])) {
$_SESSION["cart"][$product->id]["qty"] += $qty;
} else {
$_SESSION["cart"][$product->id] = [
"qty" => $qty,
"title" => $product->title,
"price" => $product->price,
"image" => $product->image,
];
}
}

e tudo vai bem até eu tentar adicionar outro item. Então Yii em vez de abrir sessão existente cria um novo com este último item que eu adicionei. Qual pode ser a razão deste tipo de comportamento?

Eu estou trabalhando em um servidor web local OpenServer e não alterei qualquer configuração que possa estar relacionada às sessões.

Respostas:

2 para resposta № 1

Você basicamente não está usando session componente em tudo. Altere seu código para:

public function actionAdd( ) {

$id = Yii::$app->request->get("id");
$product = Product::findOne($id);

// REMOVE THIS
// session is started automatically when using component
// $session = Yii::$app->session;
// $session->open();

$cart = new Cart();
$cart->addToCart($product);

$this->layout = false;
return $this->render("cart-modal", compact("session"));
}

public function addToCart($product, $qty = 1) {

$session = Yii::$app->session;
if ($session->has("cart")) {
$cart = $session["cart"]; // you can not modify session subarray directly
} else {
$cart = [];
}
if(isset($cart[$product->id])) {
$cart[$product->id]["qty"] += $qty;
} else {
$cart[$product->id] = [
"qty" => $qty,
"title" => $product->title,
"price" => $product->price,
"image" => $product->image,
];
}
$session->set("cart", $cart);
}

Espero que ajude. Se não significa que o problema está em outro lugar, mas, no entanto, você deve usar session componente corretamente.


1 para resposta № 2

Ok, eu percebi. O problema estava com o meu servidor. Assim que me mudei para o VPS esta questão foi embora.