2009-11-24 10 views
18

मेरे पास एक तृतीय पक्ष स्क्रिप्ट है और यह सोच रहा था कि PHP के साथ मैं session_start() को कुछ करने से पहले घोषित कर सकता हूं?मैं कैसे जांचूं कि session_start दर्ज किया गया है या नहीं?

session_id() returns the session id for the current session or the empty string ("") if there is no current session (no current session id exists).

या हो सकता है परीक्षण $_SESSION या isset साथ सेट कर दिया जाता है कि क्या नहीं,,, चाल कर सकता के रूप में सेट नहीं किया जाना चाहिए:

something like if(isset($_session_start())) { //do something } 
+1

[यदि सत्र शुरू हो गया है तो टेस्ट का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/3357740/test-if- सत्र-is-started) –

+9

हां, लेकिन यह 3 साल पहले पूछा गया था। उस सवाल को 2 साल पहले पूछा गया था। –

+0

देखें [PHP सत्र पहले ही शुरू हो चुका है] जांचें [https://stackoverflow.com/q/6249707/6521116) –

उत्तर

13

मैं तुम्हें session_id समारोह इस्तेमाल कर सकते हैं लगता है जब कोई सत्र शुरू नहीं हुआ है - आपको बस उम्मीद करनी है कि सत्र शुरू करने के बिना $_SESSION पर कुछ भी कुछ भी निर्दिष्ट नहीं करता है।

1
function session_started(){ return !!session_id(); } 
+3

डॉन बहुत चालाक नहीं होगा;)। मैं 'वापसी (session_id()! == "") पसंद करूंगा। – middus

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

जाँच आप अपने वर्तमान सत्र सक्रिय रखने के लिए भले ही यह एक पाश वापस प्रस्तुत आवेदन जहाँ आप अपने कार्यक्रम के भीतर यदि डेटा गलत टाइप किया है प्रपत्र का पुन: उपयोग करने की योजना है या अतिरिक्त नियंत्रण और संतुलन है की अनुमति देगा अगले कार्यक्रम में जाने से पहले।

+8

मैं 'if (session_id() == '') 'का उपयोग करने के लिए reccomend होगा, क्योंकि सत्र बंद होने पर' $ _SESSION' सेट किया जा सकता है। – Ragnagord

+0

सच है, लेकिन सत्र शुरू होने पर सभी $ _SESSION ['चर'] शून्य पर सेट हो जाते हैं। साथ ही, session_id() एस क्लाइंट साइड कुकी मान हैं। यह डेवलपर पर निर्भर करता है कि सत्र डेटा का उपयोग कैसे किया जाता है। – Maarek

+0

@Marek हर बार 'session_start()' कहा जाता है, सत्र चर सभी शून्य पर सेट नहीं हैं। और जब कोई सत्र बंद होता है (स्क्रिप्ट से बाहर निकलने या 'session_write_close()' को कॉल करके) सत्र डेटा अभी भी बनी रहती है। ऐसे मामलों में आपकी जांच पर्याप्त नहीं है, क्योंकि यह बंद सत्र को पुनरारंभ नहीं करेगा। – Stefan

25

पीएचपी> = 5.4.0 के रूप में, आप समारोह session_status() कि आपको बताती हैं कि यह किया गया है को प्रारंभ या नहीं या यदि यह अक्षम है की है।

उदाहरण के लिए आप कर सकते हैं:

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

आप http://www.php.net/manual/en/function.session-status.php

7
php के लिए

में इसके बारे में अधिक पढ़ सकते हैं> = 5.4.0

if (session_status() == PHP_SESSION_NONE) { 
session_start(); 
} 
php के लिए

< 5.4.0

if(session_id() == '') { 
session_start(); 
} 
+1

यह अनुशंसित विधि है। [http://www.php.net/manual/en/function.session-status.php ](http://www.php.net/manual/en/function.session-status.php) –

+0

ध्यान दें कि <5.4.0 समाधान काफी बेकार है। session_id() सत्र_start() को तब तक एक खाली स्ट्रिंग वापस कर देगा। इसे हर बार कहा जाता है। –

0

सत्र पहले से ही शुरू करते हैं, तो त्रुटि: "गंभीर त्रुटि: लिखने संदर्भ में समारोह वापसी मान का उपयोग नहीं कर सकते"

इस प्रयास करें:

$session = session_id(); 
if(empty($session)){ 
    session_start(); 
} 
0

मैं बस इसके लिए एक सरल समारोह लिखा था।

function isSessionStart() 
    { 
    if (version_compare(phpversion(), '5.4.0', '<')) { 
     if(session_id() == '') { 
     return false; 
     } 
     return true; 
    } 
    else { 
     if (session_status() == PHP_SESSION_NONE) { 
     return false; 
     } 
     return true; 
    } 
    } 
0

मेरे लिए सबसे अच्छा तरीका काम! यदि (session_status()! = 1) session_start();

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

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