2012-05-23 99 views
5

我跟着從這裏的答案,但它並沒有爲我工作:
Is possible to keep session even after the browser is closed?如何讓瀏覽器在PHP中關閉後保持會話打開?

這裏是我試過的代碼:

$session_life = 2592000; // 30 days 
session_set_cookie_params($session_life); 
session_name('my_cart'); 
session_start(); 
// update the session_life 
setcookie(session_name(),session_id(),time()+$session_life); 

這樣做的問題是,每次瀏覽器關閉我仍然得到一個新的session_id,而不是舊的。

我正在使用數據庫將項目存儲在'my_cart'中,而session_id僅用於識別用戶向他們顯示自己的購物車。

對於我來說,保持用戶購物車運行30天的最佳方式是什麼?


這是我結束了代碼:

$cart_name = "my_cart"; 
$cart_life = 2592000; // 30 days 
session_start(); 
if (isset($_COOKIE[$cart_name])) { 
    session_id($_COOKIE[$cart_name]); 
} 
setcookie($cart_name, session_id(), time()+$cart_life); 
+1

也許這是爲標準值(20:00)工作的餅乾,而不是會議。 – mawburn

+0

您的會話也可以在服務器上過期。 php參數[session.gc_maxlifetime](http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime)定義了會話信息在被垃圾回收前保留的最大時間集。 –

回答

3

我不得不做一個網站,我寫了一個類似的事情(允許有30分鐘的時間內爲客戶輸入驗證碼)

與其使用cookie(因爲您不能保證客戶將在同一瀏覽器中返回該網站),我將代碼的到期時間與用戶的記錄存儲在一起。這樣,無論他們從哪個瀏覽器訪問該頁面(例如,從移動設備開始,在桌面上完成),他們總是會同時過期。

當顧客返回到現場,我當前的時間比較到期時間和採取相應的行動

正如你已經存儲了客戶的籃子,我想補充的到期時間對的記錄,然後運行當顧客退貨時進行比較。這是很容易做到:

update basket set expiryDateTime=date_add(now(),interval 7 day) where basketID=[xyz] 

如果你願意,你甚至可以設定一天的時間在MySQL的使用多一點弄虛作假

+0

謝謝,但只有當客戶登錄後才能使用。我還希望允許客戶在無需註冊的情況下將物品添加到購物籃中。除此之外,我已經將數據庫中的last_update字段保留在購物車記錄中。 (我的意思是,我已經爲註冊客戶做這件事)。 – user1275136

+0

在這種情況下,請將購物籃存儲在具有到期日期值的Cookie(作爲JSON字符串)中。當他們返回時,檢查cookie並過期所有需要的項目。只要確保沒有個人信息存儲在cookie中。如果他們需要註冊才能真正到達結賬/付款部門,那麼一旦他們成功註冊並且僅從該處使用DB(即,用於未註冊的cookie,註冊的DB),將信息傳輸到DB, 。這樣也可以查找訂單歷史記錄。 – DaveyBoy

+0

對不起,我不認爲你瞭解我。我已經將購物車存儲在數據庫中,並且對於註冊客戶,我會從數據庫中找到他們擁有的購物車。我試圖在這裏做的是,當瀏覽器關閉時,堅持以前的session_id,以便未註冊的客戶可以從之前看到他們的購物車。所以我在會話名稱下創建了一個會話,並將其設置爲在30天內過期,但在瀏覽器關閉時似乎仍然過期。我該怎麼做才能解決這個問題?我只需要從之前的會話ID來識別已存儲在數據庫中的購物車。謝謝 – user1275136

相關問題