मेरे PHP कोड में, यदि एक सत्र पहले ही शुरू हो चुका है, और मैं एक नया शुरू करने की कोशिश करता हूं, तो मुझे निम्नलिखित सूचना मिलती है:
सूचना: एक सत्र पहले ही शुरू कर दिया गया था - session_start () को अनदेखा करना
इससे कैसे बचा जा सकता है?
मेरे PHP कोड में, यदि एक सत्र पहले ही शुरू हो चुका है, और मैं एक नया शुरू करने की कोशिश करता हूं, तो मुझे निम्नलिखित सूचना मिलती है:
सूचना: एक सत्र पहले ही शुरू कर दिया गया था - session_start () को अनदेखा करना
इससे कैसे बचा जा सकता है?
session_start()
एक को शामिल किया है और require_once
यह हर उस फाइल में है जिसकी मुझे जरूरत है।
जवाबों:
प्रयत्न
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
यदि आप एक नया चाहते हैं, तो 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) के लिए है
हां, आप यह पता लगा सकते हैं कि क्या सत्र पहले से ही चल रहा है isset($_SESSION)
। हालांकि सबसे अच्छा जवाब बस session_start()
एक से अधिक बार कॉल नहीं करना है ।
इसे आपकी लिपि में बहुत पहले कहा जाना चाहिए, संभवतः पहली पंक्ति में भी, और फिर दोबारा नहीं बुलाया जाएगा।
यदि आपके पास अपने कोड में एक से अधिक जगह है तो आप इस तरह का बग प्राप्त करने के लिए कह रहे हैं। इसे नीचे काटें ताकि यह केवल एक ही स्थान पर हो और केवल एक बार ही कॉल किया जा सके।
आपको पहले से ही सत्र शुरू करने का आह्वान करना चाहिए हो सकता है कि एक शामिल के माध्यम से फिर से बुलाया जाए?
if( ! $_SESSION)
{
session_start();
}
Notice: Undefined variable: _SESSION
। isset
इसके बजाय उपयोग करें ।
$ _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]);
फ़ंक्शन इसे और भी अधिक कुशल बनाने के लिए कुंजी => मूल्य जोड़े की एक सरणी लेता है।
इसे इस्तेमाल करे
if(!isset($_SESSION)){
session_start();
}
मेरा सुझाव है कि आप ob_start () का उपयोग करें; किसी भी प्रकार के वेरिएबल को शुरू करने से पहले, आपको ब्राउज़र बफर को ऑर्डर करना चाहिए।
संपादित करें: $ _SESSION के बाद एक अतिरिक्त) जोड़ा गया
उपरोक्त में से कोई भी उपयुक्त नहीं था, सभी php फ़ाइलों में session_start () को कॉल किए बिना, वे $ सत्र चर पर निर्भर करते हैं जिन्हें वे शामिल नहीं करेंगे। सूचना बहुत कष्टप्रद है और जल्दी से Error_log को भरें। एकमात्र उपाय जो मैं पा सकता हूं कि यह काम है ...।
error_reporting(E_ALL ^ E_NOTICE);
session_start();
एक खराब फिक्स, लेकिन यह काम करता है।
<?php
if ( session_id() != "" ) {
session_start();
}
मूल रूप से, आपको यह जांचने की आवश्यकता है कि क्या एक सत्र एक और बनाने से पहले शुरू किया गया था; ... और अधिक पढ़ रहा है ।
दूसरी ओर, आपने एक प्रयोग करने से पहले एक मौजूदा सत्र को नष्ट करने का विकल्प चुना session_destroy()
।
यदि कथन का उपयोग करें
if(!isset($_SESSION))
{
session_start();
}
या
सत्र की स्थिति के साथ सत्र की स्थिति की जाँच करें जो वर्तमान सत्र की स्थिति लौटाता है और यदि वर्तमान सत्र पहले से ही काम कर रहा है तो सत्र प्रारंभ नहीं होने पर और कुछ नहीं के साथ लौटें
session_status() === PHP_SESSION_ACTIVE ?: session_start();