2012-01-25 15 views
9

मैं वर्तमान में उस साइट पर काम कर रहा हूं जिसमें लॉग-इन (उपयोगकर्ता नाम और पासवर्ड) है - वेब सर्वर के भीतर ऑपरेटिंग सिस्टम द्वारा पासवर्ड सुरक्षा को डोमेन स्तर पर एक दायरे कहा जाता है ओएस अभी तक यह करना होगा, जब तक कि हम सिस्टम में उचित PHP लॉग नहीं निकाल लेते।PHP सत्र लॉग आउट बटन पर नष्ट

नीचे कोड, एक previous question on the stack overflow.

पर मैं आधारित है 3 फ़ाइलें (तल पर कोड के टुकड़े देखें) का उपयोग कर रहा हूँ।

प्रक्रिया है: - index.php पर लॉग इन बटन पर क्लिक करें - प्रमाण पत्र अनुक्रमणिका फ़ाइल तक पहुंचने के लिए उपयोगकर्ता नाम और पासवर्ड दर्ज करें। - लॉगआउट बटन पर क्लिक करें, जो logout.php फ़ाइल का संदर्भ देता है - इसे कैश साफ़ करना चाहिए और उपयोगकर्ता को शीर्ष स्तर सूचकांक में वापस करना चाहिए।

यह इस अर्थ में 'सत्र को नष्ट नहीं करता' है कि आपको संकेत मिलने पर पासवर्ड दोबारा दर्ज करने के लिए नहीं कहा जाता है, जो अनिवार्य रूप से मैं बनना चाहता हूं।

PHP का मेरा न्यूनतम ज्ञान मुझे थोड़ा सा स्टंप छोड़ देता है।

index.php (बटन में लॉग के साथ शीर्ष स्तर फ़ाइल)

<?php session_start(); ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Test</title> 
</head> 
<body> 
<a href="authenticate/index.php">Log In Btn</a> 
</body> 
</html> 

प्रमाणित/index.php (इस फ़ोल्डर में पासवर्ड से सुरक्षित है - लॉग आउट बटन पर जो लिंक के साथ सूचकांक फ़ाइल logout.php फाइल करने के लिए)

<?php session_start(); ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Log out</title> 
</head> 
<body> 
<a href="logout.php">Log Out Btn</a> 
</body> 
</html> 

प्रमाणित/logout.php

<?php 
session_start(); //to ensure you are using same session 
session_destroy(); //destroy the session 
header("location:/index.php"); //to redirect back to "index.php" after logging out 
exit(); 
?> 
+3

फ़ोल्डर पासवर्ड से सुरक्षित है, तो पीएचपी प्रमाणीकरण नहीं कर रही है। अपाचे (या वेब सर्वर) है। – xbonez

+0

यह समझ में आता है, बहुत धन्यवाद @xbonez – fitzilla

उत्तर

22

पासवर्ड सुरक्षित होने वाले फ़ोल्डर में कुछ भी PHP के साथ करने के लिए नहीं है!

उपयोग की जाने वाली विधि को "मूल प्रमाणीकरण" कहा जाता है। उपयोगकर्ता से बंद करने के लिए कहने के अलावा, "ब्राउजर" करने के लिए कोई क्रॉस-ब्राउजर तरीके नहीं हैं ...

यहां आप PHP में इसे कैसे कर सकते हैं (पूरी तरह से अपने अपाचे मूल ऑथ को हटाएं .htaccess में या जहां यह पहली बार है):

login.php:

<?php 
session_start(); 
//change 'valid_username' and 'valid_password' to your desired "correct" username and password 
if (! empty($_POST) && $_POST['user'] === 'valid_username' && $_POST['pass'] === 'valid_password') 
{ 
    $_SESSION['logged_in'] = true; 
    header('Location: /index.php'); 
} 
else 
{ 
    ?> 

    <form method="POST"> 
    Username: <input name="user" type="text"><br> 
    Password: <input name="pass" type="text"><br><br> 
    <input type="submit" value="submit"> 
    </form> 

    <?php 
} 

index.php

<?php 
session_start(); 
if (! empty($_SESSION['logged_in'])) 
{ 
    ?> 

    <p>here is my super-secret content</p> 
    <a href='logout.php'>Click here to log out</a> 

    <?php 
} 
else 
{ 
    echo 'You are not logged in. <a href="login.php">Click here</a> to log in.'; 
} 

logout.php:

<?php 
session_start(); 
session_destroy(); 
echo 'You have been logged out. <a href="/">Go back</a>'; 

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

आशा है कि इससे आपको यह समझने में सहायता मिलती है कि क्या हो रहा है।

+0

बहुत बढ़िया! HTTP प्रमाणीकरण विधि से काफी बेहतर, जिसमें लॉगिंग-आउट कोड अधिक जटिल है। यदि आप सभी तीन कोडब्लॉक में PHP क्लोजिंग टैग जोड़ देंगे, तो मैं आपको जवाब दूंगा। ओह, मैंने पहले ही किया है! :-) –

+1

@FrankConijn कृपया http://php.net/manual/en/language.basic-syntax.phptags.php देखें: "यदि कोई फ़ाइल शुद्ध PHP कोड है, तो PHP समापन टैग को छोड़ना बेहतर है फ़ाइल का अंत। यह PHP क्लोजिंग टैग के बाद आकस्मिक व्हाइटसाइट या नई लाइनों को जोड़ा जा रहा है, जो अवांछित प्रभाव पैदा कर सकता है क्योंकि PHP प्रोग्रामर से उस बिंदु पर किसी भी आउटपुट भेजने के लिए आउटपुट बफरिंग शुरू नहीं करेगा। " – stackunderflow

+0

मुझे लगता है कि पोस्टआउट का उपयोग करके लॉगआउट लागू किया जाना चाहिए, न प्राप्त करें। – chespinoza

3

पहले उस लॉगआउट बटन में logout.php पृष्ठ का लिंक दें।

<?php 
session_start(); 
session_destroy(); 
?> 

जब सत्र शुरू हो गया है, पिछले/वर्तमान उपयोगकर्ता के लिए सत्र शुरू कर दिया गया है, तो जरूरत नहीं है:

यहाँ कोड है: उस पृष्ठ में कोड है जो नीचे दी गई है बनाने उपयोगकर्ता नाम घोषित करने के लिए। Session_destroy विधि द्वारा इसे स्वचालित रूप से हटा दिया जाएगा।

0

// लॉगआउट

if(isset($_GET['logout'])) { 
    session_destroy(); 
    unset($_SESSION['username']); 
    header('location:login.php'); 
} 

?>

+0

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित अल्पकालिक सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [बहुत सुधार होगा] (// meta.stackexchange.com/q/114762) यह दिखाकर इसका दीर्घकालिक मूल्य * क्यों * यह समस्या का एक अच्छा समाधान है, और भविष्य के पाठकों के साथ इसे और अधिक उपयोगी बना देगा अन्य, समान प्रश्न। आपके द्वारा किए गए अनुमानों सहित कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। –

संबंधित मुद्दे