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

यह विधि कार्ट मॉडल के साथ काम करती है और सत्र में मेरा आइटम जोड़ती है:

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

और जब तक मैं एक और आइटम जोड़ने की कोशिश नहीं करता तब तक सब ठीक हो जाता है। फिर मौजूदा सत्र खोलने के बजाय वाईआई इस आखिरी वस्तु के साथ एक नया बनाता है जिसे मैंने जोड़ा है। इस तरह के व्यवहार का कारण क्या हो सकता है?

मैं एक स्थानीय वेब सर्वर ओपनसेवर पर काम कर रहा हूं और हेवन ने सत्रों से संबंधित किसी भी सेटिंग को नहीं बदला है।

उत्तर:

जवाब के लिए 2 № 1

आप मूल रूप से उपयोग नहीं कर रहे हैं 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

ठीक है, मैंने सोचा है। समस्या मेरे सर्वर के साथ थी। जैसे ही मैं वीपीएस में चले गए, यह मुद्दा चला गया है।