PHP सत्र जो पहले ही शुरू किए जा चुके हैं


82

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

सूचना: एक सत्र पहले ही शुरू कर दिया गया था - session_start () को अनदेखा करना

इससे कैसे बचा जा सकता है?


3
यदि कोई पुराना चल रहा है तो नया सत्र शुरू न करें?
मदारा का भूत

के संभावित डुप्लिकेट कैसे पता लगाएं कि सत्र के सक्रिय? - कृपया प्रश्न पूछने से पहले खोज का उपयोग करें।
हैकर

मेरे लिए यह केवल session_start () को हटाकर काम करता है, अगर सत्र पहले ही शुरू हो गया है, तो हमें इसे फिर से शुरू करने की आवश्यकता क्यों है। मेरे मामले में यह सिर्फ एक config.php फ़ाइल थी, जो कोड में INCLUDEd
मंगेश साठे

मैंने अपने session_start()एक को शामिल किया है और require_onceयह हर उस फाइल में है जिसकी मुझे जरूरत है।
नूरची

जवाबों:


249

प्रयत्न

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

यदि आप अपनी सभी सामग्री को लपेटने के लिए मास्टर पृष्ठ का उपयोग कर रहे हैं तो यह सुरक्षा को लागू करना आसान बनाता है।
रेमंड वचागा

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

31

यदि आप एक नया चाहते हैं, तो 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करने के बजाय वैश्विक जाँच से बचना चाहूंगा session_status():

नए समारोह के माध्यम से सत्र की स्थिति को उजागर करें, session_status यह (PHP> = 5.4.0) के लिए है


5

केवल यदि आप पिछले सत्र को नष्ट करना चाहते हैं:

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

या आप उपयोग कर सकते हैं

unset($_SESSION['variable_session _data'])

किसी विशेष सत्र चर को नष्ट करने के लिए।



2

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

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

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


1

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

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

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

2
इस आग जोखिम: Notice: Undefined variable: _SESSIONissetइसके बजाय उपयोग करें ।
T30

1

$ _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

इसे इस्तेमाल करे

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

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

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


0

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

    error_reporting(E_ALL ^ E_NOTICE);
    session_start();

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


0

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

@session_start();

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

श्रेष्ठ,


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

मूल रूप से, आपको यह जांचने की आवश्यकता है कि क्या एक सत्र एक और बनाने से पहले शुरू किया गया था; ... और अधिक पढ़ रहा है

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


0

यदि कथन का उपयोग करें

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

या

सत्र की स्थिति के साथ सत्र की स्थिति की जाँच करें जो वर्तमान सत्र की स्थिति लौटाता है और यदि वर्तमान सत्र पहले से ही काम कर रहा है तो सत्र प्रारंभ नहीं होने पर और कुछ नहीं के साथ लौटें


session_status() === PHP_SESSION_ACTIVE ?: session_start();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.