2012-09-26 25 views
14

मुझे अपने ऑनलाइन परीक्षण प्रबंधन प्रणाली में एक अजीब समस्या है।पृष्ठ को फिर से लोड किए बिना सत्र को कैसे जीवंत रखें?

परीक्षण फ़ॉर्म (test.php) में कुछ उपयोगकर्ताओं को प्रश्न का उत्तर देने और फ़ॉर्म जमा करने के लिए लंबे समय की आवश्यकता है।

पर्चे को जमा सत्र समाप्त हो गया है और उपयोगकर्ता फिर से लॉगिन करना होगा

यह एक कोड समस्या

मैं सभी पृष्ठों

ini_set('session.gc_maxlifetime', 18000); 

के शीर्ष में यह मान सेट नहीं है के बाद वहाँ एक है सत्र की समाप्ति को रोकने के लिए टेस्ट फॉर्म में पेज को पुनः लोड किए बिना 10 मिनट के सत्र को रीफ्रेश करने का तरीका?

कृपया मेरी मदद करो

धन्यवाद

+0

कुछ AJAX कॉल कर सकते हैं? क्या आप अपनी लिपि का थोड़ा और वर्णन कर सकते हैं? कुछ कोड नमूने मदद मिलेगी :) – Gogol

+0

दिलचस्प। मैं इसी तरह की समस्या से निपट रहा हूं लेकिन इस मामले पर मेरी राय यह है कि किसी को अंतराल पर सत्र समय समाप्ति को स्वचालित रूप से रीसेट करने से बचना चाहिए क्योंकि यह प्रभावी रूप से एक अनंत सत्र बनाएगा जो ब्राउज़र विंडो खुला होने तक जारी रहेगा। इसके बजाए मैं सुझाव देता हूं कि आपका अधिकतम जीवनकाल बढ़ाना चाहिए, और उपयोगकर्ता कार्रवाई के आधार पर टाइमआउट को रीफ्रेश किया जा सकता है। यहां तक ​​कि माउस चाल भी चाल कर सकती है, माउस को स्थानांतरित होने के बाद टाइमर शुरू करें। जब तक कि कुछ उपयोगकर्ता इंटरैक्शन घटक शामिल नहीं होते हैं, यह एक बड़ा सुरक्षा छेद बनाता है। सत्र समाप्त होने के लिए डिज़ाइन किए गए हैं। –

उत्तर

25

आप जावास्क्रिप्ट एक्सएचआर उपयोग कर सकते हैं, या दूसरों, इसे कहते हैं AJAX।

अजाक्स का उपयोग आप एक PHP स्क्रिप्ट है कि अपने सत्र ताज़ा करता है हर 10 मिनट में कॉल कर सकते हैं। :)


यह तब तक है जब तक मैं "सटीक" पर जा सकता हूं।

जावास्क्रिप्ट

var refreshSn = function() 
{ 
    var time = 600000; // 10 mins 
    settimeout(
     function() 
     { 
     $.ajax({ 
      url: 'refresh_session.php', 
      cache: false, 
      complete: function() {refreshSn();} 
     }); 
    }, 
    time 
); 
}; 

refresh_session.php

<?php 
session_start(); 

// store session data 
if (isset($_SESSION['id'])) 
$_SESSION['id'] = $_SESSION['id']; // or if you have any algo. 
?> 

वैसे भी, एक और समाधान परीक्षण पृष्ठ के लिए सत्र का समय विस्तार करने के लिए केवल का उपयोग कर समाधान यहां प्रस्तुत

होगा

How do I expire a PHP session after 30 minutes?

+0

मुझे आपको और मदद चाहिए कि क्या आप मुझे सही कोड दे सकते हैं? –

+1

ने मेरा उत्तर अपडेट किया :) – sheeks06

+8

PHP स्क्रिप्ट में, क्या यह 'session_start()' पर्याप्त नहीं है? –

9

आपको बस यह ($ .post के लिए jQuery का उपयोग करती है):

जावास्क्रिप्ट (अपने ऑनलोड-समारोह या कुछ और अंदर डाल)

setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes 

refresh_session.php

<?php 
    session_start(); 

    if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well 
    $_SESSION['token'] = $_SESSION['token']; 
    } 
?> 

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



अतिरिक्त जानकारी:

हालांकि मुझे लगता है कि यह सिर्फ php में session_start() कॉल करने के लिए काफी है, अगर मैं यह अधिकार (http://nl3.php.net/function.session-start) पढ़ें:

पढ़ने कॉलबैक किसी मौजूदा सत्र डेटा को पुनर्प्राप्त करेगा ( विशेष धारावाहिक प्रारूप में संग्रहीत) और अनसुलझा होगा और ऑटो पर उपयोग किया जाएगा कॉलबैक सहेजे गए सत्र डेटा को PHP सत्र हैंडलिंग पर वापस लौटाते समय $ _SESSION superglobal पर मूल रूप से पॉप्युलेट करें।

और परीक्षण के दौरान मैंने केवल उपरोक्त कोड को मेरे आगंतुक पृष्ठ पर रखा, न कि व्यवस्थापक पृष्ठ पर। लेकिन मेरे पास दोनों ब्राउज़र एक ही ब्राउज़र (क्रोम) में खुल गए थे, और व्यवस्थापक पृष्ठ भी कम से कम एक घंटे से अधिक समय तक लॉग इन रहा था (अब और जांच नहीं किया गया था)। लेकिन, मैं अगर यह अभी भी काम करता है अगर आप केवल session_start() उपयोग करते हैं, मैन्युअल रूप से सभी पर किसी भी सत्र-वर ताज़ा बिना पता नहीं है ..

किसी भी तरह से, मुझे यकीन है कि सत्र-वार्स मैं जरूरत होना चाहते वास्तव में अभी भी हैं :)

+0

आपका "अतिरिक्त जानकारी" सच नहीं प्रतीत होता है। मुझे भी वही समस्या हो रही है। मेरे सत्र को जिंदा रखने की कोशिश कर रहे सर्वर पर एक AJAX कॉल (पिंग/पोंग) बनाया गया। प्रत्येक 5 मिनट में परीक्षण प्रूपोज चलने के लिए। Nomatter क्या, मैं लगभग 2 घंटे के बाद डी-प्रमाणीकृत हो जाता है।अब aprouch बदलने सत्र सत्र की कोशिश कर रहा है। –

+0

@FlipVernooij तो "सत्र बदलने का दृष्टिकोण" कैसे चला गया? –

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

  • कोई संबंधित समस्या नहीं^_^