2012-11-20 21 views
11

विशेषज्ञ,कालबाह्य कोडिनेटर सत्र कैसे साफ किए जाते हैं?

मैं समझने की कोशिश कर रहा हूं कि कोड को डेटाबेस तालिका में सत्रों को संग्रहीत करने के लिए कॉन्फ़िगर किया गया है, तो कोडिनेटर में सत्र कैसे साफ किए जाते हैं।

मेरे मामले में, मेरे पास उस सत्र तालिका में तीन समाप्ति सत्र हैं और एक ही उपयोगकर्ता के लिए एक सक्रिय एक है। मैनुअल कहता है: "नोट: सत्र वर्ग में निर्मित कचरा संग्रह है जो कालबाह्य सत्रों को साफ़ करता है ताकि आपको ऐसा करने के लिए अपना खुद का दिनचर्या लिखने की आवश्यकता न हो।"

हम्म, तो डीबी सत्र तालिका में मेरा 'पुराना' सत्र कब साफ़ हो रहा है या क्या मुझे कुछ याद आ रही है?

धन्यवाद!

+0

2.1.3 (user_data) से पहले साफ़ नहीं किया गया था, आपको इसे मैन्युअल रूप से साफ़ करना था, तो क्या आपके सत्र में कोई उपयोगकर्ता_डेटा है? यदि ऐसा है तो $-- session-> unset_userdata (सरणी (...)) का उपयोग करें; अन्यथा यह-> सत्र-> sess_destroy() पर्याप्त होना चाहिए – Philip

+0

धन्यवाद फिलिप लेकिन मैं यह जानना चाहता था कि कैसे कोडिनेटर स्वचालित रूप से सत्र को साफ करता है और जब समाप्ति के बाद ... – dutchman711

उत्तर

14

यहाँ सत्र वर्ग के प्रासंगिक स्रोत कोड है:

/** 
* Garbage collection 
* 
* This deletes expired session rows from database 
* if the probability percentage is met 
* 
* @access public 
* @return void 
*/ 
function _sess_gc() 
{ 
    if ($this->sess_use_database != TRUE) 
    { 
     return; 
    } 

    srand(time()); 
    if ((rand() % 100) < $this->gc_probability) 
    { 
     $expire = $this->now - $this->sess_expiration; 

     $this->CI->db->where("last_activity < {$expire}"); 
     $this->CI->db->delete($this->sess_table_name); 

     log_message('debug', 'Session garbage collection performed.'); 
    } 
} 

यह समारोह एक ही स्थान पर कहा जाता है सत्र वर्ग (लगभग आखिरी पंक्ति) के निर्माता में, है, तो सामान्य परिस्थितियों में अनुरोध के अनुसार एक बार ।

$this->gc_probability कक्षा के शीर्ष पर 5 पर हार्डकोड किया गया है और इसे बदलना संभव नहीं लगता है। मुझे यकीन नहीं है, लेकिन मुझे विश्वास है कि इसका मतलब है कि 5% समय (यादृच्छिक रूप से) कचरा संग्रह चलाएगा, सत्र डीबी तालिका से पुरानी प्रविष्टियों को साफ़ कर देगा।

ध्यान दें कि ये पुरानी प्रविष्टियां कोई महत्व या हानि नहीं हैं, सफाई केवल तभी की जाती है ताकि आपकी डेटाबेस तालिका पुरानी, ​​बेकार रिकॉर्ड के साथ अधिभारित न हो।

+0

अंतर्दृष्टि के लिए बहुत बहुत धन्यवाद! :) – dutchman711