/ / Yii2 crée une nouvelle session au lieu d'ouvrir l'existant - php, session, yii, yii2

Yii2 crée une nouvelle session au lieu d'ouvrir une session existante - php, session, yii, yii2

Je travaille sur une logique simple de stockage de mon panier en session avec Yii2 natif yiiwebSession. Chaque fois que j'ajoute un article à un panier, j'appelle une méthode:

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"));
}

cette méthode fonctionne avec un modèle Cart et ajoute mon élément à la session:

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,
];
}
}

et tout se passe bien jusqu'à ce que j'essaie d'ajouter un autre élément. Puis, au lieu d'ouvrir une session existante, Yii en crée une nouvelle avec ce dernier élément que j'ai ajouté. Quelle peut être la raison de ce type de comportement?

Je travaille sur un serveur Web local OpenServer et n’ai pas modifié les paramètres pouvant être liés aux sessions.

Réponses:

2 pour la réponse № 1

Vous n'utilisez fondamentalement pas session composant du tout. Changez votre code pour:

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);
}

J'espère que ça aide. Sinon, cela signifie que le problème est ailleurs, mais vous devez néanmoins utiliser session composant correctement.


1 pour la réponse № 2

Ok, je me suis dit. Le problème venait de mon serveur. Dès que je suis passé à VPS, ce problème a disparu.