/ / Yii2 erstellt eine neue Sitzung, anstatt sie zu öffnen - php, session, yii, yii2

Yii2 erstellt eine neue Sitzung, anstatt sie zu öffnen - php, session, yii, yii2

Ich arbeite an einer einfachen Logik des Speicherns meines Einkaufswagens in Sitzung mit Yii2 nativ yiwebSitzung. Jedes Mal, wenn ich einen Artikel zu einem Einkaufswagen hinzufüge, rufe ich eine Methode auf:

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

Diese Methode funktioniert mit einem Warenkorbmodell und fügt mein Element zur Sitzung hinzu:

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

und alles geht gut, bis ich versuche, einen weiteren Gegenstand hinzuzufügen. Dann erstellt Yii, anstatt die bestehende Sitzung zu öffnen, eine neue mit diesem letzten Punkt, den ich hinzugefügt habe. Was kann der Grund für diese Art von Verhalten sein?

Ich arbeite an einem lokalen Webserver OpenServer und hat keine Einstellungen geändert, die möglicherweise mit Sitzungen zusammenhängen.

Antworten:

2 für die Antwort № 1

Sie verwenden im Grunde nicht session Komponente überhaupt. Ändern Sie Ihren Code 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);
}

Ich hoffe, es hilft. Wenn nicht, bedeutet das, dass das Problem woanders liegt, aber trotzdem sollte man es benutzen session Komponente richtig.


1 für die Antwort № 2

Ok, habe ich mir gedacht. Das Problem war mit meinem Server. Sobald ich zu VPS gewechselt bin, ist dieses Problem verschwunden.