到現在爲止,我總是在我的在線商店中使用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
- 1. PHP $ _SESSION到期
- 2. ColdFusion表單值到php setcookie()
- 3. PHP中的$ _session ['']&$ _session [「」]之間的區別
- 4. PHP的setCookie和getCookie
- 5. PHP的setcookie VS Zend_Http_Cookie
- 6. 關於php setcookie
- 7. PHP setcookie警告
- 8. PHP setcookie「SameSite = Strict」?
- 9. php setcookie域名
- 10. PHP setcookie()問題
- 11. PHP未能setcookie
- 12. PHP setcookie問題
- 13. setcookie ajax php問題
- 14. php session setcookie和unset
- 15. PHP setcookie返回null
- 16. PHP - setcookie不生效
- 17. PHP - $ _Session
- 18. PHP將$ _POST合併到$ _SESSION
- 19. PHP $ _SESSION變量得到()
- 20. PHP的setcookie整個域名
- 21. PHP setcookie()函數的問題
- 22. PHP的setcookie不會工作
- 23. PHP session_destroy()的setcookie時間()
- 24. php setcookie顯式地到本地主機
- 25. php $ _SESSION混合
- 26. PHP $ _SESSION問題
- 27. 使用PHP $ _SESSION
- 28. php $ _SESSION TWIG + Mini2
- 29. PHP $ _SESSION變量
- 30. PHP頭和$ _SESSION
*沒有啓用Cookie *您回答了您自己的問題。 < - – Rizier123 2015-02-23 09:08:21
我認爲如果您想長時間節省時間,您必須將它們保存在數據庫中 – Rizier123 2015-02-23 09:12:10
非常好的主意,這樣我就可以跟蹤我保存的購物車。但是,我如何識別每個訪客?我認爲'session_id'將不起作用。 – Kupigon 2015-02-23 09:22:25