/ / Yii2 crea una nuova sessione invece di aprire esistente: php, session, yii, yii2

Yii2 crea una nuova sessione invece di aprire esistente: php, session, yii, yii2

Sto lavorando su una semplice logica di memorizzazione del mio carrello della spesa in sessione usando nativo Yii2 yiiwebSession. Ogni volta che aggiungo un articolo a un carrello, chiamo un metodo:

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

questo metodo funziona con un modello Cart e aggiunge il mio oggetto alla sessione:

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 tutto va bene fino a quando non provo ad aggiungere un altro oggetto. Quindi Yii invece di aprire una sessione esistente ne crea una nuova con questo ultimo elemento che ho aggiunto. Quale può essere la ragione di questo tipo di comportamento?

Sto lavorando su un server web locale OpenServer e non ho cambiato alcuna impostazione che potrebbe essere correlata alle sessioni.

risposte:

2 per risposta № 1

Fondamentalmente non stai usando session componente a tutti. Cambia il tuo codice in:

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

Spero possa essere d'aiuto. In caso contrario, il problema è da qualche altra parte, ma comunque dovresti usare session componente correttamente.


1 per risposta № 2

Ok, ho capito che il problema era con il mio server e non appena mi sono trasferito su VPS questo problema è finito.