PHP में सत्रों का उपयोग करने का सबसे आसान, अच्छा अभ्यास और सबसे आसान तरीका क्या है?

पिछली बार जब मैंने उन्हें इस्तेमाल किया था, तब से PHP में सत्र बदल गए थे, इसलिए मैं सत्रों का उपयोग करने का एक आसान तरीका ढूंढ रहा हूं लेकिन साथ ही यह अपेक्षाकृत सुरक्षित और एक अच्छा सामान्य अभ्यास भी है।

0

7 उत्तर

सत्र मेरे PHP ज्ञान का एक महत्वपूर्ण हिस्सा थे क्योंकि इससे मुझे अपना पहला वेब एप्लिकेशन विकसित करने पर प्रमाणीकरण समस्या में अपना लॉग हल करने में मदद मिली।

session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
    if( auth($_POST['username'], $_POST['password']) )
    {
        //Authentication passed
        $_SESSION['user'] = $_POST['username'];
       //redirect to required page
        header( "Location: index.php" );
    } 
    else 
    {
       //Authentication failed redirect to login
       header( "Location: loginform.html" );
    }
} 
else 
{
      //Username and Password are required
      header( "Location: loginform.html" );
}
0
जोड़ा

सत्र प्रबंधन कुछ समय पहले बदल गया (मुझे लगता है कि यह लगभग 4.4 था)। पुरानी तंत्र अभी भी काम करती है, लेकिन इसे हटा दिया जाता है। यह बदतर है, इसलिए मैं इसे स्पष्ट रहने की सलाह देता हूं। आज, आप ग्लोबल वैरिएबल $ _SESSION (यह एक सरणी है) तक पहुंच कर सत्र का उपयोग करते हैं। आप कर सकते हैं वहां ऑब्जेक्ट इंस्टेंस डाल सकते हैं, लेकिन अगले पृष्ठ पर सत्र शुरू करने से पहले आपको उन ऑब्जेक्ट्स के लिए क्लास परिभाषाएं लोड करने की आवश्यकता है। autoload का उपयोग करके आप यहां सहायता कर सकते हैं।

इससे पहले कि आप $ _SESSION का उपयोग कर सकें, आपको सत्र शुरू करना चाहिए। सत्र शुरू करने के बाद से हेडर भेजता है, आपके पास पहले कोई आउटपुट नहीं हो सकता है। इसे दो तरीकों से हल किया जा सकता है: या तो आप हमेशा अपनी स्क्रिप्ट की शुरुआत में सत्र शुरू करते हैं। या आप सभी आउटपुट बफर करें , और इसे अंत में भेजें लिपी।

प्रत्येक अनुरोध पर सत्र को पुन: उत्पन्न करना एक अच्छा विचार है। इससे हाइजैक बहुत कम हो जाता है।

यह (थोड़ा) बुरी सलाह है, क्योंकि यह साइट को पहुंच योग्य नहीं बना सकती है। जब भी उपयोगकर्ता हों तो आपको सत्र-आईडी पुन: उत्पन्न करना चाहिए हालांकि विशेषाधिकार बदलते हैं। आम तौर पर इसका मतलब है, जब भी वे लॉग इन करते हैं। यह सत्र-निर्धारण (सत्र-अपहरण का एक रूप) को रोकने के लिए है। इस विषय पर अधिक जानने के लिए यह हालिया धागा @ साइटपॉइंट देखें।

कुकीबेस वाले सत्रों का उपयोग करना केवल ठीक है, लेकिन यदि आप लॉगिन आईडी को लॉगिन पर पुन: उत्पन्न करते हैं, तो यह कोई अतिरिक्त सुरक्षा नहीं जोड़ता है, और यह पहुंच को थोड़ा कम करता है।

0
जोड़ा
नज़दीक से देखें। सत्र-आईडी का हां पुन: उत्पन्न करें, लेकिन जब आपको आवश्यकता हो तो केवल । इसका मतलब है कि जब उपयोगकर्ता लॉग इन करता है।
जोड़ा लेखक troelskn, स्रोत
मैं उस साइटपॉइंट फोरम पर गया हूं और एक नज़र डाली है। जो मैं देख सकता हूं उससे वे वास्तव में आईडी पुनर्जन्म की सलाह देते हैं और कुकी केवल समग्र रूप से उपयोग करते हैं।
जोड़ा लेखक Laith, स्रोत
थ्रेड में हर कोई उस रुख से सहमत नहीं है
जोड़ा लेखक Laith, स्रोत

एक सत्र() ऑब्जेक्ट में $ SESSION सरणी को एन्सेप्लेट करें जो आपको स्वचालित सुरक्षा फ़िल्टर, फ्लैश वेरिएबल्स (var जो तब एक बार उपयोग किए जाने पर उपयोग किया जाता है) समेत एक समान (फिर भी विघटनकारी) तरीके से सत्र, प्राप्त, और पोस्ट से चर प्राप्त करने की अनुमति देता है, और डिफ़ॉल्ट मान सेटर्स।

उस बिंदु पर सिम्फनी के व्यवहार की नज़र डालें, यह बहुत उपयोगी है।

0
जोड़ा

सबसे पहले, केवल कुकी का उपयोग केवल तब तक करें जब तक आपके पास एक बहुत ही अच्छा व्यावसायिक कारण न हो। मेरे पास एक ग्राहक था जिसने केवल एक परियोजना के लिए यूआरएल आधारित सत्रों पर जोर दिया। बहुत असुरक्षित और साथ काम करने के लिए दर्द।

एक अच्छा विचार प्रत्येक अनुरोध पर सत्र को पुन: उत्पन्न करना है। इससे हाइजैक बहुत कम हो जाता है। उदाहरण के लिए।

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

एक और चीज जो अच्छी प्रथा है वह यह है कि यदि आप सिस्टम के हिस्से के रूप में किसी प्रकार का उपयोगकर्ता लॉगिन कर रहे हैं, तो लॉग आउट पर सत्र डेटा को पूरी तरह से अमान्य और खाली करें ताकि यह सुनिश्चित किया जा सके कि उपयोगकर्ता वास्तव में सिस्टम से लॉग आउट हो गया है। मैंने सिस्टम देखा है जहां सत्र कुकी को हटाकर लॉगआउट अभी पूरा हो गया है।

0
जोड़ा

जहां तक ​​सादगी है, यह इससे बेहतर नहीं है:

# Start the session manager
session_start(); 

# Set a var
$_SESSION['foo'] = 'whatever';

# Access the var
print $_SESSION['foo'];
0
जोड़ा

आप यह </में वर्णित अनुसार डेटाबेस में PHP सत्रों को संग्रहीत कर सकते हैं। एक>   किताब। मैंने इस विधि का उपयोग किया है और मुझे इसे सुरक्षित और कार्यान्वित करने में आसान लगता है, इसलिए मैं इसे पुनः प्राप्त करूंगा।

0
जोड़ा

जबकि सत्र सत्रों के लिए अधिक सुरक्षित हो सकता है, आपको उस स्थान पर ध्यान देना चाहिए जो आप पहले स्थान पर संग्रहीत कर रहे हैं - इसमें वास्तव में उपयोगकर्ता को पहचानने के लिए कोई आईडी नहीं होनी चाहिए (और मई का पहला नाम या पृष्ठों के बीच अस्थायी चर )।

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

उपयोग के लिए, मैं मानक वैश्विक चर की सिफारिश करेंगे:

$_SESSION['yourvar'] = 'somevalue';

यदि आप अपने सभी कोड में उस विधि का उपयोग करते हैं, तो आप session_set_save_handler , जो सत्र बैकएंड को कार्यान्वित करने का एक एकीकृत तरीका देता है। ध्यान दें कि आप सभी सत्र हैंडलिंग को रखने के लिए किसी ऑब्जेक्ट का उपयोग कर सकते हैं, बस प्रत्येक प्रविष्टि - सरणी ('स्टेटिकक्लास', 'staticmethod') को सरणी दें।

अधिक गहन उपयोग के लिए, मैं आपको सलाह दूंगा कि KohanaPHP में सत्र कैसे प्रबंधित किए जाते हैं।

0
जोड़ा