2011-12-26 20 views
5

मैं एक ऑनलाइन टिकट बुकिंग साइट बना रहा हूं। इसमें मैं निम्नलिखित बातें कर रहा हूं: उपयोगकर्ता अपनी सीट संख्याओं के साथ बस की खोज करता है। डाटाबेस को temp_seat_book = 'Y' के साथ सीट संख्याओं के साथ अपडेट किया गया है। यदि वह टिकट का भुगतान करने वाली टिकट बुक करता है तो उसकी स्थिति final_ticket_book = 'Y' पर अपडेट की जाएगी। अब मैं उस क्षेत्र को हटाना चाहता हूं जिसका temp_seat_book = 'Y' लेकिन final_ticket_book = 'N' है। इसके लिए मुझे session_ids को हटाना होगा जो 10minutes से अधिक पुराना है और final_ticket_book = 'N' है। तो मैं पृष्ठभूमि नौकरी कैसे कार्यान्वित कर सकता हूं?कुछ समय बाद सत्र को अनसेट करें

+0

बस एक टाइमस्टैम्प है और इसे जांचें? – footy

+1

'seat_status' का एक एकल डीबी फ़ील्ड नहीं होगा जिसमें 3 स्थितियों में से एक आसान हो। –

+0

क्या आपको अपना उत्तर यहां मिला है http://stackoverflow.com/questions/520237/how-do-i-expire-a-php- सत्र-after-30-minutes –

उत्तर

9

के बजाय फ़ाइलों के लिए एक खोज (शामिल है जो अधिक आई/ओ) आदि, क्या एक सत्र कुकी है: Session Cookie
एक बेहतर तरीका स्टोर करने के लिए है $ _SESSION चर में 'सबसे हाल की गतिविधि' का एक समय टिकट।
और प्रत्येक अनुरोध पर सत्र डेटा अपडेट करना (स्वचालित आवधिक AJAX कॉल सहित कोई भी)।

चलें कहते हैं कि तुम 10 मिनट के बाद सत्र अनसेट करना चाहते हैं,

if (isset($_SESSION['most_recent_activity']) && 
    (time() - $_SESSION['most_recent_activity'] > 600)) { 

//600 seconds = 10 minutes 
session_destroy(); 
session_unset(); 

} 
$_SESSION['most_recent_activity'] = time(); // the start of the session. 

Session fixation तरह के हमलों से बचने के लिए: (सत्र फिक्सेशन एक हमले कि एक हमलावर परमिट मान्य उपयोगकर्ता सत्र का अपहरण करने की है) पुनः रखने के सत्र आईडी समय-समय पर 5 मिनट के लिए कहती है (मैं पुनर्जन्म के समय के साथ-साथ सत्र की समाप्ति समय को थोड़ा और अधिक रखने का सुझाव दूंगा)। हमलों की एक और विस्तृत सूची: attack list

if (!isset($_SESSION['CREATED'])) { 
    $_SESSION['CREATED'] = time(); 
    } 
else if (time() - $_SESSION['CREATED'] > 600) { 
    session_regenerate_id(true);  
    $_SESSION['CREATED'] = time(); 
    } 

इसके अलावा, सुनिश्चित session.gc-maxlifetime अधिकतम करने के लिए सेट किया गया है समय का उपयोग करना चाहते समय सीमा समाप्त हो। आप अपने php.ini में सीधे इस

ini_set('session.gc-maxlifetime', 600) 


या सेट कर सकते हैं।

और भी

session.cookie_lifetime:

session.cookie_lifetime सेकंड में कुकी के जीवनकाल जो ब्राउज़र को भेजा जाता है निर्दिष्ट करता है।

लेकिन, सत्र को नष्ट करना सर्वर-साइड पर ध्यान दिया जाना चाहिए, न कि क्लाइंट-साइड। session.cookie_lifetime सेट 0 पर सेट करने से सत्र की कुकी सत्र सत्र कुकी के तरीके से व्यवहार करेगी, यानी कि सत्र कुकी केवल तब तक मान्य है जब तक कि ब्राउज़र बंद न हो जाए।

हालांकि इस पद्धति एक बालक कठिन है, इसका अधिक सुरुचिपूर्ण।

आह, मुझे वह लिंक मिला जो मैंने बहुत समय पहले पढ़ा था! : How do I expire a PHP session after 30 minutes?

3

मानक PHP सत्र फ़ाइलों में संग्रहीत हैं। आप एक सरल खोल स्क्रिप्ट को लागू कर सकता है किसी भी सत्र फ़ाइल जो 10 मिनट में छुआ नहीं किया गया है खोजने के लिए:

find /path/to/session/dir/* -mmin -10 

ग्रेप जो एक final_ticket_book है सत्र फ़ाइलों को खोजने के लिए इस्तेमाल किया जा सकता = 'एन' मूल्य उन्हें में संग्रहीत : (ग्रेप बाहर फ़ाइलों कौन-से मिलान के नाम थूक -l झंडे है)

grep -l 's:17:"final_ticket_book";s:1:"N";' 

दो संयोजित करके देता है:

find /path/to/session/dir -mmin -10|xargs grep -l 's:17:"final_ticket_book";s:1:"N";'|xargs rm -f 
संबंधित मुद्दे