/ / Yii2は既存のphp、session、yii、yii2を開く代わりに新しいセッションを作成する

Yii2は既存のphp、session、yii、yii2を開く代わりに新しいセッションを作成する

私は、Yii2ネイティブを使ってショッピングカートをセッションに保管するという単純なロジックに取り組んでいます yiiwebSession。 カートにアイテムを追加するたびに、メソッドを呼び出します。

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

このメソッドはCartモデルで動作し、セッションにアイテムを追加します:

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

私は別の商品を追加しようとするまでうまくいっています。 それから、既存のセッションを開くのではなく、Yiiはこの最後のアイテムを追加して新しいセッションを作成します。このような動作の理由は何でしょうか?

私はローカルWebサーバーOpenServerに取り組んでいて、セッションに関連する設定を変更していませんでした。

回答:

回答№1は2

あなたは基本的には使用していません session 全くコンポーネント。コードを次のように変更します。

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

私はそれが助けて欲しいそうでなければ、問題はどこかにあることを意味しますが、それにもかかわらず、 session コンポーネントを正しく


回答№2の場合は1

私はVPSに移行するとすぐにこの問題は解消されました。