2012-05-23 16 views
5

मैं यहाँ से जवाब का पालन किया है, लेकिन यह मेरे लिए काम नहीं किया: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); 

इस के साथ समस्या यह है कि हर बार जब ब्राउज़र है:
Is possible to keep session even after the browser is closed?

यहाँ कोड मैंने कोशिश की है बंद मैं अभी भी एक नया 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 मिनट की अवधि की अनुमति देते हैं)

कुकी का उपयोग करने के बजाय (जैसा कि आप गारंटी नहीं दे सकते कि ग्राहक एक ही ब्राउज़र में साइट पर वापस आ जाएगा), मैंने उपयोगकर्ता के रिकॉर्ड के खिलाफ कोड के लिए समाप्ति समय संग्रहीत किया। इस तरह, वे जिस ब्राउजर से पृष्ठ तक पहुंचे (उदा।, मोबाइल से शुरू, डेस्कटॉप पर परिष्करण), वे हमेशा एक ही समय में समाप्त हो जाएंगे।

साइट पर ग्राहक रिटर्न, मैं समाप्ति समय को वर्तमान समय की तुलना करने और उसके अनुसार कार्य

आप पहले से ही ग्राहकों की टोकरी भंडारण कर रहे हैं के रूप में है, मैं रिकॉर्ड के खिलाफ एक समाप्ति समय जोड़ने और फिर चल पाएंगे ग्राहक की वापसी होने पर तुलना करें।

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

आप चाहते हैं, तो आप भी दिन के समय MySQL में थोड़ा अधिक प्रवंचना का उपयोग कर

+0

धन्यवाद लेकिन यह केवल तभी काम करता है जब ग्राहक लॉग इन होता है। मैं ग्राहक को पंजीकरण के बिना टोकरी में आइटम जोड़ने की अनुमति देना चाहता था। इसके अलावा मैं कार्ट रिकॉर्ड के खिलाफ डेटाबेस में पहले से ही एक अंतिम_अपडेट फ़ील्ड रख रहा हूं। (मेरा मतलब है, मैं पहले से ही पंजीकृत ग्राहकों के लिए ऐसा करने जा रहा हूं)। – user1275136

+0

उस स्थिति में, टोकरी को एक कुकी (एक JSON स्ट्रिंग के रूप में) में समाप्ति तिथि मान के साथ भी स्टोर करें। जब वे वापस आते हैं, तो कुकी की जांच करें और होने वाली किसी भी वस्तु को समाप्त कर दें। बस सुनिश्चित करें कि कुकी में कोई व्यक्तिगत जानकारी संग्रहीत नहीं है। यदि उन्हें वास्तव में चेक-आउट/भुगतान अनुभाग में जाने के लिए पंजीकरण करने की आवश्यकता है, तो सफलतापूर्वक पंजीकृत होने के बाद सूचना को डीबी में स्थानांतरित करें और केवल वहां से डीबी का उपयोग करें (यानी, पंजीकृत के लिए कुकी, पंजीकृत के लिए डीबी) । यह ऑर्डर इतिहास की खोज भी करने की अनुमति देगा। – DaveyBoy

+0

क्षमा करें मुझे नहीं लगता कि तुम मुझे समझ गए हो। मैं पहले से ही डेटाबेस में गाड़ी संग्रहित कर रहा हूं, और पंजीकृत ग्राहकों के लिए मुझे डेटाबेस से संबंधित गाड़ियां मिलेंगी। मैं बस यहां करने की कोशिश कर रहा हूं, यह है कि जब ब्राउज़र बंद हो जाता है, तो सत्र_आईडी को पहले से जारी रखें ताकि अनियंत्रित ग्राहक पहले से ही अपना कार्ट देखेंगे। इसलिए मैंने सत्र के नाम के तहत एक सत्र बनाया, और इसे 30 दिनों में समाप्त होने के लिए सेट किया, लेकिन ब्राउज़र बंद होने पर यह अभी भी समाप्त हो गया है।इसे ठीक करने के लिए मैं क्या करूँ? मुझे पहले से ही डेटाबेस आईडी में संग्रहीत कार्ट की पहचान करने के लिए सत्र आईडी की आवश्यकता है। धन्यवाद – user1275136

संबंधित मुद्दे