खोज…


वाक्य - विन्यास

  • शून्य सत्र_अभियान (शून्य)
  • int session_cache_expire ([स्ट्रिंग $ new_cache_expire])
  • शून्य सत्र_समिति (शून्य)
  • string session_create_id ([स्ट्रिंग $ उपसर्ग])
  • बूल सेशन_डब्लू (स्ट्रिंग $ डेटा)
  • बूल सेशन_डेस्ट्रो (शून्य)
  • स्ट्रिंग सेशन_कोड (शून्य)
  • int session_gc (शून्य)
  • सरणी सत्र_गेट_कोची_परम्स (शून्य)
  • string session_id ([string $ id])
  • बूल सेशन_आईएस_ग्रिस्टर्ड (स्ट्रिंग $ नाम)
  • string session_module_name ([स्ट्रिंग $ मॉड्यूल])
  • string session_name ([स्ट्रिंग $ नाम])
  • bool session_regenerate_id ([bool $ delete_old_session = false])
  • void session_register_shutdown (शून्य)
  • बूल सेशन_ग्रिस्टर (मिश्रित $ नाम [, मिश्रित $ ...])
  • void session_reset (शून्य)
  • string session_save_path ([स्ट्रिंग $ पथ])
  • void session_set_cookie_params (int $ life [, string $ path [, string $ domain [, bool $ safe = false [, bool $ httponly = false]]]]]
  • bool session_set_save_handler (कॉल करने योग्य $ ओपन, कॉल करने योग्य $ क्लोज़, कॉल करने योग्य $ रीड, कॉल करने योग्य $ नष्ट, कॉल करने योग्य $ gc [, कॉल करने योग्य $ create_sid [, callable $ validate_sid [, कॉल करने योग्य $ update_timestamp]]]]]]]
  • बूल सेशन_स्टार्ट ([$ विकल्प = []])
  • int session_status (शून्य)
  • बूल सेशन_ऑनगिस्टर (स्ट्रिंग $ नाम)
  • void session_unset (शून्य)
  • void session_write_close (शून्य)

टिप्पणियों

ध्यान दें कि session_start() कॉल session_start() भले ही सत्र पहले ही शुरू हो गया हो, परिणाम स्वरूप PHP की चेतावनी होगी।

सत्र डेटा में हेरफेर

$_SESSION चर एक सरणी है, और आप इसे सामान्य सरणी की तरह पुनः प्राप्त या हेरफेर कर सकते हैं।

<?php
// Starting the session
session_start();

// Storing the value in session
$_SESSION['id'] = 342;

// conditional usage of session values that may have been set in a previous session
if(!isset($_SESSION["login"])) {
    echo "Please login first";
    exit;
}
// now you can use the login safely
$user = $_SESSION["login"];

// Getting a value from the session data, or with default value, 
//     using the Null Coalescing operator in PHP 7
$name = $_SESSION['name'] ?? 'Anonymous';

एक सरणी पर काम करने के तरीके के बारे में अधिक संदर्भ के लिए एक सरणी को हेरफेर करना भी देखें।

ध्यान दें कि यदि आप किसी सत्र में किसी वस्तु को संग्रहित करते हैं, तो इसे केवल कृपापूर्वक प्राप्त किया जा सकता है यदि आपके पास एक क्लास ऑटोलैडर है या आपने पहले से ही कक्षा लोड की है। अन्यथा, ऑब्जेक्ट __PHP_Incomplete_Class रूप में __PHP_Incomplete_Class , जो बाद में क्रैश हो सकता हैNamespacing और Autoloading के बारे में ऑटोलडिंग देखें।

चेतावनी:

सत्र डेटा को हाईजैक किया जा सकता है। यह उल्लिखित है: प्रो PHP सिक्योरिटी: एप्लीकेशन सिक्योरिटी प्रिंसिपल्स से लेकर XSS डिफेंस के इम्प्लीमेंटेशन तक - चैप्टर 7: सेशन हाईजैकिंग को रोकना इसलिए $_SESSION में किसी भी निजी जानकारी को कभी स्टोर न करने की जोरदार सिफारिश की जा सकती है। यह सबसे गंभीर रूप से क्रेडिट कार्ड नंबर , सरकार द्वारा जारी आईडी और पासवर्ड शामिल होंगे ; लेकिन नाम , ईमेल , फोन नंबर आदि जैसे कम अनुमान वाले डेटा में भी विस्तार करेगा, जो एक हैकर को वैध उपयोगकर्ता को प्रतिरूपित / समझौता करने की अनुमति देगा। एक सामान्य नियम के रूप में, बेकार / गैर-व्यक्तिगत मूल्यों का उपयोग करें, जैसे संख्यात्मक पहचानकर्ता, सत्र डेटा में।

एक पूरे सत्र को नष्ट कर दें

यदि आपको एक सत्र मिला है जिसे आप नष्ट करना चाहते हैं, तो आप session_destroy() साथ ऐसा कर सकते हैं

/*
    Let us assume that our session looks like this:
    Array([firstname] => Jon, [id] => 123)

    We first need to start our session:
*/
session_start();

/*
    We can now remove all the values from the `SESSION` superglobal:
    If you omitted this step all of the global variables stored in the 
    superglobal would still exist even though the session had been destroyed.
*/
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

//Finally we can destroy the session:
session_destroy();

session_destroy() का उपयोग करना $_SESSION = array(); जैसी किसी चीज़ का उपयोग करने के लिए अलग है $_SESSION = array(); जो SESSION सुपरग्लोबल में संग्रहीत सभी मानों को हटा देगा, लेकिन यह SESSION के वास्तविक संग्रहीत संस्करण को नष्ट नहीं करेगा।


नोट : हम $_SESSION = array(); session_unset() बजाय क्योंकि मैनुअल स्टाइपुलेट्स:

केवल पुराने डिप्रेस्ड कोड के लिए session_unset () का उपयोग करें जो $ _SESSION का उपयोग नहीं करता है।

session_start () विकल्प

पीएचपी सत्र के साथ शुरू हम साथ एक सरणी पारित कर सकते हैं सत्र-आधारित php.ini विकल्पों को session_start कार्य करते हैं।

उदाहरण

<?php
   if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
       // php >= 7 version
       session_start([
          'cache_limiter' => 'private',
          'read_and_close' => true,
       ]);
   } else {
       // php < 7 version
       session_start();
   }
?>

यह सुविधा session.lazy_write नामक एक नई php.ini सेटिंग भी प्रस्तुत करती है, जो true लिए चूक करती true और इसका अर्थ है कि सत्र डेटा केवल फिर से लिखा गया है, अगर यह बदल जाता है।

संदर्भ: https://wiki.php.net/rfc/session-lock-ini

सत्र का नाम

यदि सत्र कुकीज़ बनाई गई हैं, तो जाँच करना

सत्र का नाम कुकी का नाम है जिसका उपयोग सत्रों को संग्रहीत करने के लिए किया जाता है। यह पता लगाने के लिए आप इसका उपयोग कर सकते हैं कि क्या उपयोगकर्ता के लिए सत्र बनाया गया है:

if(isset($_COOKIE[session_name()])) {
    session_start();
}

ध्यान दें कि यह विधि आम तौर पर तब तक उपयोगी नहीं होती जब तक आप वास्तव में अनावश्यक रूप से कुकीज़ नहीं बनाना चाहते।

सत्र का नाम बदलना

आप session_name() कॉल करके सत्र का नाम अपडेट कर सकते हैं।

//Set the session name
session_name('newname');
//Start the session
session_start();

यदि session_name() में कोई तर्क नहीं दिया जाता है, तो वर्तमान सत्र नाम वापस आ जाता है।

इसमें केवल अल्फ़ान्यूमेरिक वर्ण होने चाहिए; यह छोटा और वर्णनात्मक होना चाहिए (यानी सक्षम कुकी चेतावनियों वाले उपयोगकर्ताओं के लिए)। सत्र नाम में केवल अंक नहीं हो सकते, कम से कम एक अक्षर मौजूद होना चाहिए। अन्यथा हर बार एक नया सत्र आईडी तैयार किया जाता है।

सत्र लॉकिंग

जैसा कि हम सभी जानते हैं कि PHP सर्वर साइड पर एक फ़ाइल में सत्र डेटा लिखती है। एक अनुरोध PHP स्क्रिप्ट जो के माध्यम से सत्र आरंभ करने के लिए किया जाता है session_start() , पीएचपी ब्लॉक करने के लिए जिसके परिणामस्वरूप इस सत्र फ़ाइल ताले / उसी के लिए अन्य आने वाले अनुरोधों को इंतजार session_id , पूरा करने के लिए है जिसकी वजह से अन्य अनुरोध पर अटक जाएगा session_start() जब तक या जब तक कि सत्र फ़ाइल लॉक जारी न हो जाए

जब तक स्क्रिप्ट पूरी नहीं हो जाती या सत्र मैन्युअल रूप से बंद नहीं हो जाता तब तक सत्र फ़ाइल लॉक रहती है। इस स्थिति से बचने के लिए अर्थात कई अनुरोधों को अवरुद्ध होने से रोकने के लिए , हम सत्र शुरू कर सकते हैं और सत्र को बंद कर सकते हैं जो सत्र फ़ाइल से लॉक को छोड़ देगा और शेष अनुरोधों को जारी रखने की अनुमति देगा।

// php < 7.0 
// start session 
session_start();

// write data to session
$_SESSION['id'] = 123; // session file is locked, so other requests are blocked

// close the session, release lock
session_write_close();

अब कोई यह सोचेगा कि यदि सत्र बंद है, तो हम सत्र के मूल्यों को कैसे पढ़ेंगे, सत्र बंद होने के बाद भी सुशोभित करें, सत्र अभी भी उपलब्ध है। इसलिए, हम अभी भी सत्र डेटा पढ़ सकते हैं।

echo $_SESSION['id'];    // will output  123

Php> = 7.0 में , हमारे पास read_only session, read_write session और lazy_write session हो सकते हैं, इसलिए इसे session_write_close() का उपयोग करने की आवश्यकता नहीं हो सकती है।

सुरक्षित सत्र बिना किसी त्रुटि के प्रारंभ करें

कई डेवलपर्स को यह समस्या होती है जब वे बड़ी परियोजनाओं पर काम करते हैं, खासकर यदि वे प्लगइन्स, एडोन, घटकों आदि पर कुछ मॉड्यूलर सीएमएस पर काम करते हैं। यहां सुरक्षित सत्र शुरू करने के लिए समाधान है, जहां पहले सभी संस्करणों को कवर करने के लिए PHP संस्करण की जाँच की जाती है और अगले पर जाँच की जाती है। यदि सत्र प्रारंभ हो जाता है। यदि सत्र मौजूद नहीं है तो मैं सत्र सुरक्षित शुरू करता हूं। यदि सत्र मौजूद है तो कुछ नहीं होता है।

if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
    if(session_status() == PHP_SESSION_NONE) {
        session_start(array(
          'cache_limiter' => 'private',
          'read_and_close' => true,
       ));
    }
}
else if (version_compare(PHP_VERSION, '5.4.0') >= 0)
{
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
}
else
{
    if(session_id() == '') {
        session_start();
    }
}

इससे आपको session_start त्रुटि से बचने में बहुत मदद मिल सकती है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow