到現在爲止,我總是在我的在線商店中使用PHP的$_SESSION
登錄和購物車存儲。我是否可以安全地將購物車存儲更改爲PHP的setcookie
,因爲我希望我的客戶長時間保留購物車?我擔心沒有啓用Cookie的客戶。是否有任何互聯網用戶沒有啓用Cookie?或者我應該使用$_SESSION
作爲備份方法 - 例如,使用會話和cookie保存它們?
回答
這就是我現在所做的。基本上,函數retrieveCart()
檢索變量$_SESSION
,並且updateCart()
更新它。它通過購物車表的LastInsertId()
識別每個購物車。
的functions.php:
function retrieveCart() {
global $DBH;
if(!isset($_SESSION['cart'])) {
if(isset($_COOKIE['cart_id'])) {
$STH = $DBH->prepare("SELECT content FROM carts_retail WHERE id=:id LIMIT 0,1");
$STH->execute(array(
'id' => $_COOKIE['cart_id']
));
if($STH->rowCount() == 1) {
while($row = $STH->fetch()) {
$_SESSION['cart'] = unserialize($row['content']);
}
}
}
else {
$STH = $DBH->prepare("INSERT INTO carts_retail (content, customer_id) VALUES (:content, :customer_id)");
$STH->execute(array(
'content' => serialize($_SESSION['cart']),
'customer_id' => (isset($_SESSION['username']) ? $_SESSION['username'] : 0)
));
setcookie('cart_id', $DBH->LastInsertId(), strtotime('+30 DAYS'));
}
}
}
function updateCart($action = NULL, $content = NULL) {
global $DBH;
if($action == 'add') {
if(is_numeric($content['id']) && is_numeric($content['qty']) && strlen($content['size']) > 0) {
$_SESSION['cart'][$content['id']] = array('qty' => $content['qty'], 'size' => $content['size']);
}
}
if($action == 'delete') {
if(is_numeric($content['id'])) {
unset($_SESSION['cart'][$content['id']]);
}
}
$STH = $DBH->prepare("UPDATE carts_retail SET content=:content, customer_id=:customer_id WHERE id=:id LIMIT 1");
$STH->execute(array(
'id' => $_COOKIE['cart_id'],
'content' => serialize($_SESSION['cart']),
'customer_id' => (isset($_SESSION['username']) ? $_SESSION['username'] : 0)
));
}
cart.php:
if(isset($_POST['action'])) {
if($_POST['action'] == 'add' || $_POST['action'] == 'delete') {
updateCart($_POST['action'], array(
'id' => (isset($_POST['id']) ? $_POST['id'] : NULL),
'qty' => (isset($_POST['qty']) ? $_POST['qty'] : NULL),
'size' => (isset($_POST['size']) ? $_POST['size'] : NULL)
));
header('Location: /cart');
}
}
不是一個真正的回答你的問題,但澄清,因爲它似乎你有一些問題$_SESSION
和$_COOKIE
的差值 - $_SESSION
默認情況下使用Cookies
,生存期是當前瀏覽器會話。一個唯一的會話ID存儲在客戶端的瀏覽器cookie上 - 使用此會話ID PHP會自動找到相應的會話值給此ID。基本上存儲在一個簡單的序列化文件在tmp文件夾中。 因此,正如你所看到的,SESSION永遠不會是(如果你將會話ID存儲在cookie中,因爲它默認爲PHP)是一個被禁用的Cookie的後備。 只是爲了讓你清楚。
問題是因爲我使用了'$ _SESSION',所以當我重新打開我的瀏覽器,購物車正在消失。在我使用'setcookie'獲取購物車ID並將其與數據庫連接後,它會保留30天,這是我的目標。 – Kupigon 2015-02-23 11:13:04
是的,只是想清除你的PHP行爲,因爲在我看來,你不知道SESSION ID也通過cookie存儲。將數據存儲在Cookie中的時間長於瀏覽器會話的一般想法是正確的。 – 2015-02-23 12:44:54
因此,會話ID保存在cookie中的時間有多長?目前,我將購物車ID保存了30天。謝謝。 – Kupigon 2015-02-23 13:27:26
*沒有啓用Cookie *您回答了您自己的問題。 < - – Rizier123 2015-02-23 09:08:21
我認爲如果您想長時間節省時間,您必須將它們保存在數據庫中 – Rizier123 2015-02-23 09:12:10
非常好的主意,這樣我就可以跟蹤我保存的購物車。但是,我如何識別每個訪客?我認爲'session_id'將不起作用。 – Kupigon 2015-02-23 09:22:25