दिलचस्प पोस्ट
UIAppearance प्रॉक्सी के माध्यम से मैं किस गुणों को सेट कर सकता हूं? एक स्पर्श के बाद UIButton को चुनना कस्टम सूचीदृश्य एडाप्टर getView विधि को कई बार कहा जाता है, और कोई सुसंगत क्रम में नहीं 'फू' इस स्कोप में घोषित नहीं किया गया था सी ++ मुझे "प्रकार का कोई प्रकार नहीं है" एक एंम प्रकार के साथ त्रुटि क्यों मिली? पायथन में पंडों में एक डाटाफ्रेम बंट कर रहा है सी #: एक विरासत घटना में वृद्धि ValueEventListener में प्रारंभ होने के बाद एक वैश्विक वैरिएबल का मूल्य रीसेट होता है एंड्रॉइड: ध्वनि स्तर खोजें जावा युद्ध बनाम जार – क्या अंतर है? स्विफ्ट में संपत्तियों को कैसे संग्रहीत किया जाए, वैसे ही मैं उद्देश्य-सी पर था? CSS3 के चयनकर्ता: कक्षा के नाम के साथ प्रथम-प्रकार की? Google Play गेम सेवाएं – साइन इन करने में असमर्थ एक WPF Treeview में SelectedItem के लिए बाइंडिंग डेटा दिए गए समूहियड / आर्टिफैक्ट आईडी के लिए नवीनतम आर्टिफैक्ट संस्करण प्राप्त करने के लिए Nexus बाकी एपीआई का उपयोग करना

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

मेरे पास एक PHP फाइल है जिसे कभी-कभी एक पृष्ठ से कहा जाता है जिसने एक सत्र प्रारंभ किया हो और कभी-कभी उस पृष्ठ से जो सत्र शुरू नहीं हो। इसलिए जब मेरे पास इस स्क्रिप्ट पर session_start() तो मुझे कभी-कभी "सत्र पहले से शुरू होने वाला" त्रुटि संदेश मिलता है। इसके लिए मैंने इन पंक्तियों को रखा है:

 if(!isset($_COOKIE["PHPSESSID"])) { session_start(); } 

लेकिन इस बार मुझे यह चेतावनी संदेश मिला है:

सूचना: अपरिभाषित चर: _SESSION

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

यदि मैं @session_start का उपयोग करता @session_start क्या यह ठीक से काम करेगा और चेतावनी को बंद करेगा?

वेब के समाधान से एकत्रित समाधान "जांचें कि क्या PHP सत्र पहले से शुरू हो चुका है"

PHP> = 5.4.0 के संस्करणों के लिए अनुशंसित तरीका

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

स्रोत: http://www.php.net/manual/en/function.session-status.php

PHP <5.4.0 के संस्करणों के लिए

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

PHP 5.4.0 से पहले PHP के संस्करणों के लिए:

 if(session_id() == '') { // session isn't started } 

यद्यपि, आईएमएचओ, यदि आपको नहीं पता कि सत्र शुरू हो गया है या नहीं, तो आपको वास्तव में अपने सत्र प्रबंधन कोड को पुनर्संरचना के बारे में सोचना चाहिए …

उसने कहा, मेरी राय व्यक्तिपरक है, और हालात हैं (जिनके उदाहरण नीचे दी गई टिप्पणियों में वर्णित हैं) जहां संभव हो सकता है पता नहीं कि क्या सत्र शुरू हो गया है।

PHP 5.4 की शुरुआत session_status () है , जो session_id() पर निर्भर होने से अधिक विश्वसनीय है।

निम्नलिखित स्निपेट पर विचार करें:

 session_id('test'); var_export(session_id() != ''); // true, but session is still not started! var_export(session_status() == PHP_SESSION_ACTIVE); // false 

इसलिए, यह जांचने के लिए कि कोई सत्र प्रारंभ हुआ है, PHP 5.4 में अनुशंसित तरीके अब है:

 session_status() == PHP_SESSION_ACTIVE 

आप ऐसा कर सकते हैं, और यह वाकई आसान है

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

आशा करता हूँ की ये काम करेगा 🙂

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

PHP 5.4 से पहले ग्लोबल फ्लैग को स्थापित करने के अलावा अन्य जानने का कोई विश्वसनीय तरीका नहीं है।

विचार करें:

 var_dump($_SESSION); // null session_start(); var_dump($_SESSION); // array session_destroy(); var_dump($_SESSION); // array, but session isn't active. 

या:

 session_id(); // returns empty string session_start(); session_id(); // returns session hash session_destroy(); session_id(); // returns empty string, ok, but then session_id('foo'); // tell php the session id to use session_id(); // returns 'foo', but no session is active. 

इसलिए, PHP 5.4 से पहले आपको एक वैश्विक बुलियन सेट करना चाहिए।

सभी पीएचपी संस्करण के लिए

 if ((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) { session_start(); } 

इसे देखो :

 <?php /** * @return bool */ function is_session_started() { if ( php_sapi_name() !== 'cli' ) { if ( version_compare(phpversion(), '5.4.0', '>=') ) { return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE; } else { return session_id() === '' ? FALSE : TRUE; } } return FALSE; } // Example if ( is_session_started() === FALSE ) session_start(); ?> 

स्रोत http://php.net

Session_id () का उपयोग करें, यदि यह सेट नहीं है तो एक खाली स्ट्रिंग देता है। यह $_COOKIE जांच करने से अधिक विश्वसनीय है

 if (strlen(session_id()) < 1) { session_start(); } 
 if (session_id() === "") { session_start(); } 

आशा करता हूँ की ये काम करेगा !

यह सभी PHP संस्करणों के लिए काम करना चाहिए। यह PHP संस्करण निर्धारित करता है, तो यह देखने के लिए जांचता है कि सत्र PHP संस्करण के आधार पर शुरू किया गया है या नहीं। तब अगर सत्र शुरू नहीं हुआ है तो इसे शुरू होता है

 function start_session() { if(version_compare(phpversion(), "5.4.0") != -1){ if (session_status() == PHP_SESSION_NONE) { session_start(); } } else { if(session_id() == '') { session_start(); } } } 

आपको केवल एक चीज की जरूरत है:

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

आपको अपने कोड को फिर से संगठित करना चाहिए ताकि आप प्रत्येक पेज निष्पादन के अनुसार एक बार session_start() कॉल करें।

इस तरह के समाधान की दक्षता के बारे में निश्चित नहीं है, लेकिन यह काम कर रही परियोजना से है यदि आपको डिफ़ॉल्ट भाषा को परिभाषित करने की आवश्यकता है तो यह भी प्रयोग किया जाता है

  /** * Start session * Fall back to ukrainian language */ function valid_session() { if(session_id()=='') { session_start(); $_SESSION['lang']='uk'; $_SESSION['lang_id']=3; } return true; } 

उत्तर @ मेलिज़ा रामोस रिस्पांस पर आधारित (प्रथम प्रतिक्रिया देखें) और http://php.net/manual/en/function.phpversion.php पर आधारित प्रतिक्रिया,

कार्रवाई:

  • यदि मौजूद नहीं है तो PHP_VERSION_ID को परिभाषित करें
  • PHP_VERSION_ID पर आधारित संस्करण की जांच करने के लिए कार्य को परिभाषित करें
  • फ़ंक्शन को openSession () को परिभाषित करें सुरक्षित

केवल openSession का उपयोग करें ()

  // PHP_VERSION_ID is available as of PHP 5.2.7, if our // version is lower than that, then emulate it if (!defined('PHP_VERSION_ID')) { $version = explode('.', PHP_VERSION); define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); // PHP_VERSION_ID is defined as a number, where the higher the number // is, the newer a PHP version is used. It's defined as used in the above // expression: // // $version_id = $major_version * 10000 + $minor_version * 100 + $release_version; // // Now with PHP_VERSION_ID we can check for features this PHP version // may have, this doesn't require to use version_compare() everytime // you check if the current PHP version may not support a feature. // // For example, we may here define the PHP_VERSION_* constants thats // not available in versions prior to 5.2.7 if (PHP_VERSION_ID < 50207) { define('PHP_MAJOR_VERSION', $version[0]); define('PHP_MINOR_VERSION', $version[1]); define('PHP_RELEASE_VERSION', $version[2]); // and so on, ... } } function phpVersionAtLeast($strVersion = '0.0.0') { $version = explode('.', $strVersion); $questionVer = $version[0] * 10000 + $version[1] * 100 + $version[2]; if(PHP_VERSION_ID >= $questionVer) return true; else return false; } function openSession() { if(phpVersionAtLeast('5.4.0')) { if(session_status()==PHP_SESSION_NONE) session_start(); } else // under 5.4.0 { if(session_id() == '') session_start(); } } 
 if (version_compare(PHP_VERSION, "5.4.0") >= 0) { $sess = session_status(); if ($sess == PHP_SESSION_NONE) { session_start(); } } else { if (!$_SESSION) { session_start(); } } 

असल में, अब यह बहुत देर हो चुकी है कि इसे यहां समझाया जाए, जैसा कि उसका हल हो गया है। यह मेरी प्रोजेक्ट्स में से एक की एक .inc फ़ाइल थी, जहां आप किसी रेस्तरां के लिए एक डिश मेनू का चयन करते हैं और एक डिश चुनते हैं और ऑर्डर हटाने / जोड़ने या बदलते हैं। जिस सर्वर पर मैं काम कर रहा था उस पर वास्तविक संस्करण नहीं था इसलिए मैंने इसे अधिक लचीला बना दिया। यह लेखकों का उपयोग करना है और इसे उपयोग करना चाहते हैं

क्या यह कोड आपके लिए स्निपेट का काम है?

 if (!count($_SESSION)>0) { session_start(); } 

PHP 5.3 पर यह मेरे लिए काम करता है:

 if(!strlen(session_id())){ session_name('someSpecialName'); session_start(); } 

तो आपके पास है यदि आप सत्र में शुरुआत नहीं करते हैं, तो सत्र शुरू होने से पहले मैं ऐसा नहीं करूँगा।

 session_start(); if(!empty($_SESSION['user'])) { //code; } else { header("location:index.php"); } 

PHP_VERSION_ID PHP 5.2.7 के रूप में उपलब्ध है, इसलिए पहले इसे देखें और यदि आवश्यक हो, तो इसे बनाएं session_status PHP 5.4 के रूप में उपलब्ध है, इसलिए हमें यह भी जांचना होगा:

 if (!defined('PHP_VERSION_ID')) { $version = explode('.', PHP_VERSION); define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); }else{ $version = PHP_VERSION_ID; } if($version < 50400){ if(session_id() == '') { session_start(); } }else{ if (session_status() !== PHP_SESSION_ACTIVE) { session_start(); } } 

मैं यह निर्धारित करने के लिए क्या उपयोग करता हूं कि कोई सत्र प्रारंभ हो रहा है, खाली और जारी करने का उपयोग करके निम्नानुसार है:

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

session_start(); बदलें session_start(); साथ में:

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