2011-06-15 17 views
19

PHP में सत्र जीवनकाल कैसे सेट करें? जब तक अनुरोध मौजूद है, मैं इसे हमेशा के लिए सेट करना चाहता हूं। अनुरोध AJAX है। मेरे PHP कोड कि AJAX अनुरोध का प्रबंध है:सत्र के जीवनकाल को कैसे सेट करें

// AJAX.php 
<?php  
session_start(); 

$_SESSION['counter'] = $_SESSION['counter'] + 1; 

header('Content-type: application/json');  
echo json_encode(array('tick' => $_SESSION['counter'])); 
?> 

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

$(document).ready(function() {    
function check() { 
    getJSON('ajax.php');   
} 

function getJSON(url) {         
    return $.getJSON(
       url, 
       function(data) { 
        $("#ticker").html(data.tick); 
       } 
      ); 
} 

setInterval(function() { 
    check(); 
}, 10000); // Tick every 10 seconds 

}); 

सत्र हमेशा 300 सेकंड के बाद रीसेट करता है।

उत्तर

31

PHP पर सत्र कुकी प्रकार सत्र के साथ काम करता है, जबकि सर्वर-साइड पर सत्र जानकारी लगातार हटा दी जाती है।

php में समय जीवन सेट के लिए, आप session_start से पहले, समारोह session_set_cookie_params उपयोग कर सकते हैं:

session_set_cookie_params(3600,"/"); 
session_start(); 

पूर्व के लिए, 3600 सेकंड 2 घंटे 3600 * 2 = 7200.

के लिए, एक घंटा है

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

आप एक तालिका "सत्र" हो सकता है:

  • session_id पूर्णांक
  • session_hash varchar (20)
  • session_data पाठ

और एक कुकी मान्य है, तो आप "सत्र को बचाने के आईडी "और" हैश "(सुरक्षा के लिए) क्लाइंट साइड पर, और आप सर्वर के डेटा पर सत्र के डेटा को सहेज सकते हैं, पूर्व:

लॉगिन पर:

setcookie('sessid', $sessionid, 604800);  // One week or seven days 
setcookie('sesshash', $sessionhash, 604800); // One week or seven days 
// And save the session data: 
saveSessionData($sessionid, $sessionhash, serialize($_SESSION)); // saveSessionData is your function 

उपयोगकर्ता वापसी हैं:

if (isset($_COOKIE['sessid'])) { 
    if (valide_session($_COOKIE['sessid'], $_COOKIE['sesshash'])) { 
     $_SESSION = unserialize(get_session_data($_COOKIE['sessid'])); 
    } else { 
     // Dont validate the hash, possible session falsification 
    } 
} 

जाहिर है, सभी सत्र/कुकीज़ कॉल, डेटा भेजने से पहले बचाने के।

+2

यह एक साधारण समस्या के लिए एक अत्यधिक जटिल समाधान की तरह लगता है। Session.cookie_lifetime के मान को कॉन्फ़िगरेशन या .htaccess फ़ाइल में सेट करने में क्या गड़बड़ है? जिस तरह से आप सुझाव दे रहे हैं, प्रत्येक PHP फ़ाइल में अतिरिक्त कोड की आवश्यकता होती है जिसके लिए सत्र की आवश्यकता होती है। –

+0

हां, लेकिन मैं सरल समाधान लिखता हूं ("लेकिन, यह ..." से पहले), शेष या प्रतिक्रिया "मैं इसे हमेशा के लिए सेट करना चाहता हूं", हे, session.cookie_fifetime, सर्वर-साइड कॉन्फ़िगरेशन है, लेकिन ब्राउज़र इसे "सत्र कुकी" के रूप में प्रबंधित करता है। सरल समाधान के लिए session_set_cookie_params भी उपयोग किया जा सकता है। – Exos

+0

स्पष्ट रूप से मैंने जिस सत्र का उपयोग किया था वह बड़े डेटा को सहेजना है जो हर 10 सेकंड में बदल जाता है जब तक कि अजाक्स अनुरोध मौजूद न हो। इस तरह मुझे इसे हमेशा के लिए सेट करने की जरूरत है। वैसे, अच्छा जवाब धन्यवाद – brian

-2

जब तक उपयोगकर्ता अपनी कुकीज़ को हटा नहीं देता या अपने ब्राउज़र को बंद नहीं करता है, तो सत्र अस्तित्व में रहना चाहिए।

+5

सही नहीं है! हर्गिज नहीं। सर्वर के पक्ष में दोनों सत्र ** और ** कुकी समाप्त हो जाएगी। – bytecode77

2

सत्र आपकी php.ini फ़ाइल में या आपकी .htaccess फ़ाइल में कॉन्फ़िगर किया जा सकता है। PHP session documentation पर एक नज़र डालें।

आप जो मूल रूप से करना चाहते हैं वह php.ini में session.cookie_lifetime लाइन की तलाश है और इसे मान 0 है ताकि सत्र कुकी ब्राउज़र बंद होने तक वैध हो। अगर आप उस फ़ाइल को संपादित नहीं कर सकते हैं, तो आप अपनी .htaccess फ़ाइल में php_value session.cookie_lifetime 0 जोड़ सकते हैं।

10

सेट सेकंड में एक ही मूल्य के लिए php मानकों का पालन:

session.cookie_lifetime 
session.gc_maxlifetime 
php.ini, .htaccess में

या उदाहरण के लिए

साथ
ini_set('session.cookie_lifetime', 86400); 
ini_set('session.gc_maxlifetime', 86400); 
एक दिन के लिए

लिंक:

http://www.php.net/manual/en/session.configuration.php

http://www.php.net/manual/en/function.ini-set.php