2012-04-23 16 views
7

हाल ही में मैंने तीन केक ऐप्स बनाए हैं और सभी तीन इस समस्या को साझा करते हैं। कॉन्फ़िगरेशन ज्यादातर स्टॉक है और मैं इसे सत्र विकल्पों के रूप में उपयोग करता हूं।केकेपीएचपी मुझे लॉग आउट करता रहता है

Configure::write('Session', array(
    'defaults' => 'php', 
    'cookie' => 'test' 
)); 

हर किसी googling के बहुत सारे के बाद बस पता चलता है कि सुरक्षा स्तर बहुत अधिक है, लेकिन मैं यह मान कभी नहीं बदल दिया है, यह है:

Configure::write('Security.level', 'medium'); 

संपादित: मैं भी कम सुरक्षा के साथ की कोशिश की है और कोई बदलाव नहीं।

मैं केवल मूल लेख का उपयोग कर रहा हूं यह जांचने के लिए कि उपयोगकर्ता लॉग इन है या नहीं।

कुकी में लॉग इन करने के बाद तीन घंटे बाद समाप्त होने के लिए सेट किया गया है और समाप्ति तिथि अपडेट नहीं होती है जब तक कि मैं दोबारा लॉग इन नहीं करता, क्या यह सामान्य है?

मैं समस्या को दोहराने के लिए प्रतीत नहीं कर सकता, कभी-कभी मैं लॉग इन करूंगा और अगला अगला क्लिक मुझे फिर से लॉग आउट करेगा और दूसरी बार यह थोड़ी देर तक टिकेगा।

मैं विंडोज 7 पर क्रोम का उपयोग कर रहा हूं और वेबसाइट पर कोई AJAX नहीं है।

कोई विचार? धन्यवाद।

+0

यह बहुत mee के साथ होता है ... ('Security.level' 'कम') को बदलने 'कॉन्फ़िगर :: लिखने का प्रयास है,' !! – Rikesh

+0

हैंडल को उड़ाने और अब ब्राउज़र को मुकदमा चलाने की आवश्यकता नहीं है;) – jeremyharris

+0

@Jleagle आप लॉग इन उपयोगकर्ता के लिए कुकी समय कब सेट करते हैं और कैसे? कोड पोस्ट करें, कृपया .. – thecodeparadox

उत्तर

5

क्या आप अजाक्स का उपयोग कर रहे हैं। क्या आईई में समस्या ही हो रही है?

आईई ब्राउज़र के लिए अजाक्स कॉल के लिए एक अलग ब्राउज़र एजेंट स्ट्रिंग का उपयोग करता है। अतिरिक्त सुरक्षा के लिए, केक ब्राउज़र एजेंट की जांच करता है और, आईई के मामले में, लगता है कि एक और ब्राउज़र सत्र को हाइजैक करने का प्रयास कर रहा है क्योंकि एजेंट अलग है।

आप के साथ इस चेक को निष्क्रिय कर सकते हैं:

Configure::write('Session.checkAgent', false); 
+0

मैं बिल्कुल AJAX का उपयोग नहीं कर रहा हूं। और एकमात्र ब्राउजर मैंने कोशिश की है क्रोम है। – 472084

+0

उत्कृष्ट !!! jQuery के साथ मेरा अजाक्स मुद्दा फिक्स्ड – Ondrej

0

आप Chrome ब्राउज़र पर CakePHP सत्र के साथ मुद्दों कर केवल एक ही नहीं हैं।

Pixelastic साथी सांकेतिक शब्दों में बदलनेवाला पता चलता है following fix, बोली:

बस app/config/ में session_custom.php नामक फ़ाइल बनाने के लिए, उस में निम्नलिखित लाइनों ड्रॉप:

// Killing this config that was causing so much trouble with Chrome 
ini_set('session.referer_check', ''); 

// No session id in url 
ini_set('session.use_trans_sid', 0); 

// Using custom cookie name instead of PHPSESSID 
ini_set('session.name', Configure::read('Session.cookie')); 

// Cookie like time, depending on security level 
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 

// Cookie path 
ini_set('session.cookie_path', $this->path); 

फिर अपने core.php फ़ाइल में Configure::write('Session.save', 'session_custom'); निर्धारित किया है।

+0

यह सहायक लगता है, लेकिन मुझे लगता है कि इसकी 1.3, 2.1 नहीं है। इस लाइन 'ini_set ('session.name', तो कॉन्फ़िगर :: पढ़ा ('Session.cookie'));' मुझे लगता है कि पहले से ही 2.1 में जोड़ा जाता है - मैं आगे की जांच करेंगे – 472084

+0

मैं सिर्फ 'ini_set साथ करने की कोशिश की ('session.referer_check ',' ');' लाइन और फिर आपका पूरा कोड होगा और न ही इसे होने से रोक दिया जाएगा। हालांकि मुझे विश्वास है कि यह केवल क्रोम के लिए एक समस्या है। – 472084

0

समस्या सत्र के साथ है:

सबसे पहले जाँच उर 'phpinfo();'

जांचें कि सत्र फ़ाइल आधारित हैं या नहीं।

यदि हां, तो प्रक्रिया के माध्यम से जाएं।

एक नई स्क्रिप्ट फ़ाइल (php) जो केवल इस कोड होता है बनाने के लिए: <?php var_dump(session_save_path());?>

रन यदि आप शून्य या खाली स्ट्रिंग मिलता तो इस प्रक्रिया के लिए जाना:

  1. पहले में एक निर्देशिका बनाने के लिए अपने मूल फ़ोल्डर नाम 'xyz' या जो भी आप चाहते हैं।
  2. इसे लिखने योग्य बनाओ iee chmod 777
  3. स्क्रिप्ट पर जाएं जहां आप सत्र शुरू करते हैं और सत्र शुरू करने से पहले सत्र बनाया गया है, तो session_save_path को नव निर्मित निर्देशिका में बदलें। i.e .: session_save_path('pathToxyz');

और फिर आप कर चुके हैं।

यदि सत्र स्मृति के रूप में सेट किए गए हैं: कोई कॉन्फ़िगरेशन आवश्यक नहीं है। वे सिर्फ सिस्टम मेमोरी का उपयोग करते हैं। उस स्थिति में आप इस समस्या में कभी नहीं मिले होंगे।

+0

phpinfo का कौन सा हिस्सा मुझे बताता है कि मुझे क्या जानने की ज़रूरत है? - 'var_dump (session_save_path()); 'मुझे' स्ट्रिंग (20)"/var/lib/php/session "' – 472084

+0

देता है ठीक है आपके सत्र ठीक से सेट हैं। इसलिए यह आपका समाधान नहीं है हर कदम पर लॉगिन के लिए डेटा 'var_dump' करने का प्रयास करें ताकि आप प्रोग्राम में क्या हो रहा है। शायद यह आपकी मदद करेगा :) –

+0

वैसे भी आपकी मदद के लिए धन्यवाद! – 472084

1

एक ही समस्या में चलने के बाद मुझे पता चला कि यह सत्र.cookieTimeout मान के कारण हुआ था। हालांकि PHP सत्र अभी भी मान्य था, सत्र कुकी पर समाप्ति तिथि ताज़ा नहीं होती है।

यह अब मेरी सत्र config

Configure::write('Session', array(
     'defaults' => 'php', 
     'timeout' => 30, // The session will timeout after 30 minutes of inactivity 
     'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts 
     'checkAgent' => false, 
     'autoRegenerate' => true, // causes the session expiration time to reset on each page load 
    )); 
संबंधित मुद्दे