无法不使用键而是仅使用值将多个值添加到 $_SESSION 变量中
Unable to add multiple values into $_SESSION variable not using keys but only values
我需要更新 $_SESSION['all_product_ids']
,所有 produkt_id
值通过 ajax 作为 POST 变量传递,并将它们保存在此会话变量的数组中。
问题是由于某种原因,该值总是被覆盖,并且永远不会添加到当前值。
我的 ajax 回调函数中有这段代码:
if( isset( $_POST['product_id'] ) ) {
$product_id = $_POST['product_id'];
if ( isset ( $_SESSION['all_product_ids'] ) ) {
// do nothing
} else {
$_SESSION['all_product_ids'] = [];
}
if ( in_array($product_id, $_SESSION['all_product_ids']) ) {
// do nothing if product id already in the array
} else {
$_SESSION['all_product_ids'][] = $product_id;
}
echo json_encode( $_SESSION['all_product_ids'] );
}
问题是 ajax returns 总是只有一个(最后一个 clicked/added 产品 ID)所以响应是 ["78"]
或 ["60"]
但是从不 ["78", "60"]
我做错了什么?
试试这个:
<?php
session_start();
if( !empty( $_POST['product_id'] ) ) {
$product_id = $_POST['product_id'];
if ( isset ( $_SESSION['all_product_ids'] ) ) {
// do nothing
} else {
$_SESSION['all_product_ids'][] .= $product_id;
}
if ( in_array($product_id, $_SESSION['all_product_ids']) ) {
// do nothing if product id already in the array
} else {
$_SESSION['all_product_ids'][] .= $product_id;
}
echo json_encode( $_SESSION['all_product_ids'] );
}
备注:
1 - 您需要在脚本开头添加 session_start();
。
2 - 我已将 isset
更改为 !empty
否则您可能会得到空值。
3 - 请注意 .=
将附加到现有数组,而 =
将替换数组中的任何内容。
4 - 我已经在我的服务器上测试了代码,并且值已成功附加到 $_SESSION['all_product_ids']
。
// determine if session has started
Function HasSessionStarted() {
$result = false;
// Check if session has started
IF ((session_status() == PHP_SESSION_NONE) || (session_id() == '')) {
$result = true;
}
return $result;
}
Function Upd_Product_Session() {
$sess_products = array();
IF ( (isset($_POST['product_id'])) && (!empty($_POST['product_id'])) ) {
$product_id = $_POST['product_id']; // should really do some sanitization and validation
$new_session = HasSessionStarted(); // Check Session Status
IF ($new_session) { session_start(); }
IF (isset( $_SESSION['all_product_ids'])) {
$sess_products = json_decode($_SESSION['all_product_ids'], true); // json decode existing session
}
IF (!in_array($product_id, $sess_products) ) { // not in array -> add it
$sess_products[] = $product_id;
}
// Set Session
$_SESSION['all_product_ids'] = json_encode($sess_products);
IF ($new_session) { session_write_close(); }
}
// debugging
die('<pre>'.print_r($sess_products, true).'</pre>');
}
我需要更新 $_SESSION['all_product_ids']
,所有 produkt_id
值通过 ajax 作为 POST 变量传递,并将它们保存在此会话变量的数组中。
问题是由于某种原因,该值总是被覆盖,并且永远不会添加到当前值。
我的 ajax 回调函数中有这段代码:
if( isset( $_POST['product_id'] ) ) {
$product_id = $_POST['product_id'];
if ( isset ( $_SESSION['all_product_ids'] ) ) {
// do nothing
} else {
$_SESSION['all_product_ids'] = [];
}
if ( in_array($product_id, $_SESSION['all_product_ids']) ) {
// do nothing if product id already in the array
} else {
$_SESSION['all_product_ids'][] = $product_id;
}
echo json_encode( $_SESSION['all_product_ids'] );
}
问题是 ajax returns 总是只有一个(最后一个 clicked/added 产品 ID)所以响应是 ["78"]
或 ["60"]
但是从不 ["78", "60"]
我做错了什么?
试试这个:
<?php
session_start();
if( !empty( $_POST['product_id'] ) ) {
$product_id = $_POST['product_id'];
if ( isset ( $_SESSION['all_product_ids'] ) ) {
// do nothing
} else {
$_SESSION['all_product_ids'][] .= $product_id;
}
if ( in_array($product_id, $_SESSION['all_product_ids']) ) {
// do nothing if product id already in the array
} else {
$_SESSION['all_product_ids'][] .= $product_id;
}
echo json_encode( $_SESSION['all_product_ids'] );
}
备注:
1 - 您需要在脚本开头添加 session_start();
。
2 - 我已将 isset
更改为 !empty
否则您可能会得到空值。
3 - 请注意 .=
将附加到现有数组,而 =
将替换数组中的任何内容。
4 - 我已经在我的服务器上测试了代码,并且值已成功附加到 $_SESSION['all_product_ids']
。
// determine if session has started
Function HasSessionStarted() {
$result = false;
// Check if session has started
IF ((session_status() == PHP_SESSION_NONE) || (session_id() == '')) {
$result = true;
}
return $result;
}
Function Upd_Product_Session() {
$sess_products = array();
IF ( (isset($_POST['product_id'])) && (!empty($_POST['product_id'])) ) {
$product_id = $_POST['product_id']; // should really do some sanitization and validation
$new_session = HasSessionStarted(); // Check Session Status
IF ($new_session) { session_start(); }
IF (isset( $_SESSION['all_product_ids'])) {
$sess_products = json_decode($_SESSION['all_product_ids'], true); // json decode existing session
}
IF (!in_array($product_id, $sess_products) ) { // not in array -> add it
$sess_products[] = $product_id;
}
// Set Session
$_SESSION['all_product_ids'] = json_encode($sess_products);
IF ($new_session) { session_write_close(); }
}
// debugging
die('<pre>'.print_r($sess_products, true).'</pre>');
}