2012-05-18 2 views
53

शुरू कर दिया गया है मेरे PHP कोड में, यदि एक सत्र पहले से ही शुरू कर दिया है, और मैं एक नया एक शुरू करने के लिए प्रयास करते हैं, मैं निम्नलिखित सूचना मिलती है:पीएचपी सत्र कि पहले से ही

नोटिस: एक सत्र पहले से ही किया गया था प्रारंभ - session_start को अनदेखा कर रहा है()

मैं इससे कैसे बच सकता हूं?

+3

यदि कोई पुराना है तो नया सत्र शुरू न करें दौड रहा है? –

+0

संभावित डुप्लिकेट [कैसे एक सत्र सक्रिय है या नहीं?] (Http://stackoverflow.com/questions/3788369/how-to-tell-if-a- सत्र-is-active) - कृपया पहले खोज का उपयोग करें एक सवाल पूछना – hakre

उत्तर

167

<?php 
    if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 
?> 
+0

सरल और काम करता है ... मुझे बस इतना चाहिए कि मुझे @valeriyGorbatikov –

1

आप पहले से ही सत्र शुरू हो सकता है एक के माध्यम से फिर से बुलाया जा रहा है कहा जाता है की चाहिए शामिल प्रयास करें?

if(! $_SESSION) 
{ 
    session_start(); 
} 
+1

थोड़ा देर हो चुकी है, लेकिन किसी भी कारण से यह काम नहीं करता है। केवल (! जारी ($ _ सत्र)) काम करता है। – Mave

+2

इसे आग लगाने का जोखिम: 'नोटिस: अपरिभाषित चर: _SESSION'। इसके बजाए 'जारीकर्ता' का प्रयोग करें। – T30

25

आप एक नया चाहते हैं, तो यह शुरू करने से पहले session_destroy() है। जांचने के लिए कि यह शुरू करने से पहले अपने सेट, session_status() फोन:

$status = session_status(); 
if($status == PHP_SESSION_NONE){ 
    //There is no active session 
    session_start(); 
}else 
if($status == PHP_SESSION_DISABLED){ 
    //Sessions are not available 
}else 
if($status == PHP_SESSION_ACTIVE){ 
    //Destroy current and start new one 
    session_destroy(); 
    session_start(); 
} 

मैं session_status() विधि कॉल करने के बजाय वैश्विक $_SESSION जाँच से बचने के बाद से पीएचपी करने के लिए स्पष्ट रूप से इस समारोह को लागू किया:

सत्र स्थिति का पर्दाफाश नए कार्य के माध्यम से, session_status इस के लिए है (PHP> = 5.4.0)

0
<?php 
if (session_id() != "") { 
    session_start(); 
} 

असल में, आपको यह जांचना होगा कि कोई दूसरा निर्माण करने से पहले एक सत्र शुरू किया गया था; ... more reading.

दूसरी ओर, आपने session_destroy() का उपयोग करके किसी अन्य को बनाने से पहले मौजूदा सत्र को नष्ट करना चुना।

2

सिर्फ अगर आप पिछले सत्र को नष्ट करना चाहते:

<?php 
    if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 
    else 
    { 
     session_destroy(); 
     session_start(); 
    } 
?> 

या आप

unset($_SESSION['variable_session _data']) 

उपयोग कर सकते हैं एक विशेष सत्र चर को नष्ट करने।

2

हां, आप यह पता लगा सकते हैं कि सत्र isset($_SESSION) की जांच करके पहले से चल रहा है या नहीं। हालांकि सबसे अच्छा जवाब बस session_start() को एक से अधिक बार कॉल नहीं करना है।

इसे आपकी स्क्रिप्ट में संभवतः पहले पंक्ति में भी बुलाया जाना चाहिए, और फिर फिर से नहीं बुलाया जाना चाहिए।

यदि आपके पास अपने कोड में एक से अधिक स्थानों पर है तो आप इस तरह की बग प्राप्त करने के लिए कह रहे हैं। इसे काट दें ताकि यह केवल एक ही स्थान पर हो और केवल एक बार बुलाया जा सके।

0

इस

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

कोशिश मैं तुम्हें) ob_start उपयोग करने के लिए (सुझाव देते हैं; किसी भी सैसन varriable शुरू करने से पहले, यह आपको ब्राउज़र बफर आदेश देना चाहिए।

संपादित करें: एक अतिरिक्त जोड़ी) के बाद $ _SESSION

-3

session_start() की जगह; इसके बाद के संस्करण की

if(!isset($a)) 
{ 

$a = False; 
if($a == TRUE) 
{ 
    session_start(); 
    $a=TRUE; 
} 

} 
+0

यह उत्तर के निकट-डुप्लिकेट है जो वर्षों से आसपास रहा है, सिवाय इसके कि आपका कम सही है। '$ A' क्या है - आपने इसे पहले से कहीं और सेट कर दिया होगा। '$ _SESSION' की जांच करने से अधिक समझदारी होती है। – moopet

0

शुन्य से उपयुक्त था, session_start() सभी php फ़ाइलें जो $ सत्र चर पर निर्भर करते हैं वे शामिल नहीं किया जाएगा में बुला के बिना। नोटिस बहुत परेशान है और जल्दी से error_log भरें। एकमात्र समाधान जो मुझे लगता है कि यह काम करता है यह है ....

error_reporting(E_ALL^E_NOTICE); 
    session_start(); 

एक खराब फिक्स, लेकिन यह काम करता है।

0

$ _SESSION के अवरोध व्यवहार को ठीक करने का प्रयास करते समय मुझे इस समस्या का सामना करना पड़ा।

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

सत्र फ़ाइल जब तक स्क्रिप्ट पूरा करता है या सत्र मैन्युअल बंद कर दिया है बंद कर दिया बनी हुई है।

तो, डिफ़ॉल्ट रूप से, एक पृष्ठ को केवल-पढ़ने के मोड में सत्र खोलना चाहिए। लेकिन एक बार यह केवल पढ़ने में खुला है, इसे लिखने के तरीके में बंद और फिर से खोलना होगा।

const SESSION_DEFAULT_COOKIE_LIFETIME = 86400; 

/** 
* Open _SESSION read-only 
*/ 
function OpenSessionReadOnly() { 
    session_start([ 
         'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME, 
         'read_and_close' => true, // READ ACCESS FAST 
        ]); 
    // $_SESSION is now defined. Call WriteSessionValues() to write out values 
} 

/** 
* _SESSION is read-only by default. Call this function to save a new value 
* call this function like `WriteSessionValues(["username"=>$login_user]);` 
* to set $_SESSION["username"] 
* 
* @param array $values_assoc_array 
*/ 
function WriteSessionValues($values_assoc_array) { 
    // this is required to close the read-only session and 
    // not get a warning on the next line. 
    session_abort(); 

    // now open the session with write access 
    session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]); 

    foreach ($values_assoc_array as $key => $value) { 
     $_SESSION[ $key ] = $value; 
    } 
    session_write_close(); // Write session data and end session 

    OpenSessionReadOnly(); // now reopen the session in read-only mode. 
} 

OpenSessionReadOnly(); // start the session for this page 

फिर जब आप कुछ मूल्य लिखने के लिए जाना:

WriteSessionValues(["username"=>$login_user]); 
0

यह और अधिक कुशल होगा:

@session_start(); 

स्क्रीन में त्रुटि हैंडलर से बचना

बेस्ट,