2012-04-10 19 views
14

क्या कोई सत्र शुरू हुआ है या नहीं, और फिर लोड नहीं होने पर यह जांचने के लिए एक छोटा कोड चाल है? वर्तमान में मुझे एक त्रुटि "सत्र पहले से शुरू हो गया है ..." अगर मैं सत्र में डालता हूं तो जांच के बावजूद शुरू होता है। ,केवल session_start() लोड करें यदि सत्र मौजूद नहीं है?

आप php के एक संस्करण का उपयोग कर रहे हैं, तो पहले 5.4 को

आप आमतौर पर के साथ और उसके आकर्षक प्राप्त कर सकते हैं:

उत्तर

35

isset आम तौर पर जांच करने के लिए करता है, तो पूर्वनिर्धारित चर वर्तमान में परिभाषित कर रहे हैं उचित तरीका है बस नीचे दिए गए कोड को कर रहे हैं, लेकिन ध्यान रखें कि यदि किसी कारण से सत्र अक्षम हैं, तो session_start() को अभी भी कॉल किया जाएगा जो $ _SESSION सरणी बनाने की अनुमति नहीं होने के कारण त्रुटियों और अनावश्यक डीबगिंग की ओर अग्रसर हो सकता है।

if(!isset($_SESSION)){session_start();} 

आप अगर सत्र किसी कारण से अक्षम हैं देखने के लिए जाँच के लिए खाते में करना चाहते हैं, आप त्रुटि संदेश दबाने सकते, एक परीक्षण सत्र चर सेट, और फिर सत्यापित करें कि यह स्थापित किया गया था। यदि ऐसा नहीं है, तो आप अक्षम सत्रों के लिए प्रतिक्रिया में कोड कर सकते हैं। आप अपनी स्क्रिप्ट की शुरुआत में या उसके करीब यह सब करना चाहते हैं। तो जैसा कि एक उदाहरण (अलग ढंग से त्रुटि हैंडलिंग सेटिंग के आधार पर काम करता है):

if(!isset($_SESSION)){session_start();} 
$_SESSION['valid'] = 'valid'; 
if($_SESSION['valid'] != 'valid') 
{ 
    //handle disabled sessions 
} 

हालांकि, अगर आप PHP संस्करण 5.4 या अधिक से अधिक, उपयोग कर रहे हैं

आप session_status() समारोह, के रूप में एक बेहतर विकल्प का उपयोग कर सकते यह सत्रों को अक्षम करने के लिए खाते हैं और जांच करता है कि कोई सत्र पहले से मौजूद है या नहीं।

if (session_status() === PHP_SESSION_NONE){session_start();} 

नोट कि PHP_SESSION_NONE PHP द्वारा एक निरंतर सेट है और इसलिए उद्धरण में लिपटे होने की जरूरत नहीं है। यह पूर्णांक 1 का मूल्यांकन करता है, लेकिन यह एक निरंतर है जो विशेष रूप से जादू संख्याओं की आवश्यकता को खत्म करने के लिए सेट किया गया था, निरंतर के खिलाफ परीक्षण करने के लिए सबसे अच्छा।

+0

PHP के लिए समाधान का उल्लेख करने के लिए धन्यवाद <5.4 – Houston

+0

@ अच्छी तरह से, मैं आपको कहूंगा कि आपको या तो 5.4.16 में एक बग मिला है या अधिक संभावना है कि एक अजीब php/server config है। किसी भी तरह से अपने किनारे के मामलों को कोहनी करना अच्छा होता है: डी – Rooster

7

कई लोग बस चेतावनी को दबाने के लिए @session_start() का उपयोग करते हैं कि सत्र पहले ही शुरू हो चुका है। विकल्प आमतौर पर है:

if (session_status() === PHP_SESSION_NONE) session_start(); 
1
if (session_id() === "") { session_start(); } 
3

इस हालत

if (version_compare(phpversion(), '5.4.0', '<')) { 
if(session_id() == '') { 
    session_start(); 
} }else{ 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} } 

कोशिश आप केवल त्रुटि से बचने चाहते हैं, समारोह उदाहरण से पहले @ का उपयोग करें:

@session_start(); 
+0

हाय वहाँ, एसओ में आपका स्वागत है। क्या आप अपनी पोस्ट को यह बताने के लिए संपादित कर सकते हैं कि आपका कोड क्या करता है और यह ओपी की समस्या को कैसे हल करता है? कोड केवल उत्तर निराश होते हैं और हटाने के अधीन होते हैं। –

0

जाँच नया शुरू करने से पहले मौजूदा सत्र के लिए:

// # if phpversion() is >= 5.4 
    if(phpversion() >= 5.4) { 

    // # check session_status() function for value 'PHP_SESSION_NONE' 
    if(session_status() === PHP_SESSION_NONE) { 
     session_start(); 
    } 

    } else { // # maintain backwards compat. with PHP versions older than 5.4 

     // # if $_SESSION object if NOT set, start a new session! 
     if(!isset($_SESSION)) { 
     session_start(); 
     } 
    } 
संबंधित मुद्दे