2010-04-24 16 views
5

मैं प्रमाणीकरण के साथ कुकी का उपयोग करने की कोशिश कर रहा हूं।php कुकी काम नहीं कर रहा

यह पृष्ठ एक बार उपयोगकर्ता द्वारा दर्ज किए और

<? 
    if ((!$_POST[username]) || (!$_POST[password])) { 
     header("Location: show_login.html"); 
     exit; 
    } 
    $db_name = "testDB"; 
    $table_name = "auth_users"; 
    $connection = @mysql_connect("localhost", "user", "pass") or die(mysql_error()); 
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error()); 
    $sql = "SELECT * FROM $table_name WHERE username ='$_POST[username]' AND password = password('$_POST[password]')"; 
    $result = @mysql_query($sql, $connection) or die(mysql_error()); 
    $num = mysql_num_rows($result); 
     if ($num != 0) { 
      $cookie_name = "auth"; 
      $cookie_value = "ok"; 
      $cookie_expire = "0"; 
      $cookie_domain = "domain.com.au"; 
      setcookie($cookie_name, $cookis_value, $cookie_expire, "/", $cookie_domain, 0); 
      $display_block = " 
      <p><strong>Secret Menu:</strong></p> 
      <ul> 
       <li><a href=\"secretA.php\">secret page A</a> 
       <li><a href=\"secretB.php\">secret page B</a> 
      </ul>"; 
     } else { 
      header("Location: show_login.html"); 
      exit; 
     } 
    ?> 

    <!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>Secret Area</title> 
    </head> 

    <body> 
    <? echo "$display_block"; ?> 


    </body> 
    </html> 

पारित जब या तो secretA.php या secretB.php मैं कर रहा हूँ फिर से लॉग इन पर पुनः निर्देशित है, यह काम करना चाहिए पर क्लिक काम करता है। यहाँ कोड है। secretB.php

<?php 

if ($_COOKIE[auth] == "ok") { 
    $msg = "<p>Welcome to secret page B, authorised user! </P>"; 
} else { 
    header("Location: /show_login.html"); 
    exit; 
} 
?> 
<HTML> 
<HEAD> 
<title>Secret Page B:</title> 
</HEAD> 
<BODY> 

<? echo "$msg"; ?> 

</BODY> 
</HTML> 
+0

'secretB.php' में 'var_dump ($ _ कुकी)' और यहां परिणाम पोस्ट करें। – hsz

+0

ऐसा करने का कोई तरीका नहीं है, क्योंकि मैं किसी पुस्तक से कुछ उदाहरणों का काम कर रहा हूं जो किसी भी कोड का उपयोग नहीं करता है, तो यह – Jacksta

+0

यह 'var_dump' जांच करेगा कि कोई कुकी सेट है या नहीं। – hsz

उत्तर

1

यह बुरा कोड के महान उदाहरण है।
इसे पोस्ट करने के लिए धन्यवाद। बहुत से लोग इसे पढ़ सकते हैं और इससे सीख सकते हैं।

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

error_reporting(E_ALL); 

आप इसे जोड़ने के बाद, अगर यह ठीक से कोड लिखा गया था, आप केवल एक त्रुटि संदेश गलत लिखे गए चर की ओर इशारा करते दिखाई देंगे: यह करने के लिए, हर स्क्रिप्ट इस लाइन शामिल होना चाहिए। लेकिन।
इसके बजाय आपको त्रुटियों का झरना दिखाई देगा। क्योंकि PHP कभी-कभी जानबूझकर त्रुटियों को अलग नहीं कर सकता है।

इस प्रकार। कोड में कोई जानबूझकर त्रुटियां नहीं होनी चाहिए, ताकि आप कभी-कभी देख सकें।
यह याद रखने के लिए एक महान सबक है।

ये त्रुटियां क्या हैं?

  1. उद्धरण द्वारा सीमित PHP में स्ट्रिंग्स को सीमित किया जा रहा है।
    तो, यदि आपके पास स्ट्रिंग username है, तो इसे "username" के रूप में लिखा जाना चाहिए।
    और $ _POST [उपयोगकर्ता नाम] $ _POST ["उपयोगकर्ता नाम"] बन गया।
    (और इसके विपरीत, चर को उद्धरण की आवश्यकता नहीं है, इसलिए echo "$msg";echo $msg; होना चाहिए)
  2. सभी चर सेट किए जाने या अस्तित्व के लिए चेक किए जाने चाहिए। हां, तो
    if ((!$_POST[username]) || (!$_POST[password])) {
    बन जाना चाहिए
    if (!empty($_POST["username"]) OR !empty($_POST["password"])) {

इस तरह के एक कोड के साथ आप केवल सामयिक त्रुटि दिखाई देगी और इसे तुरंत दूर करने के लिए सक्षम हो।

+0

संपादित किया है उस जानकारी को पोस्ट करने के लिए समय निकालने के लिए धन्यवाद। लंबे समय तक एक बड़ी मदद होगी। चीयर्स – Jacksta

1

कभी-कभी इसका सबसे सरल समाधान होता है। मेरे साथ भी ठीक वैसा ही हुआ था। मैं localhost (wampserver) पर चल रहा था। मुझे पता चला कि मेरी फ़ायरवॉल लोकलहोस्ट से सभी कुकी अनुरोधों को अवरुद्ध कर रही थी। मैंने उस समय जोन अलार्म का इस्तेमाल किया लेकिन मुझे लगता है कि अन्य फ़ायरवॉल का भी असर हो सकता है। यह देखने के लिए कि क्या यह अभी भी काम नहीं करता है, अपने फ़ायरवॉल को अक्षम करने का प्रयास करें।

+0

अरे टिप के लिए धन्यवाद, मैं वास्तव में इसे लाइव सर्वर पर चलाता हूं। – Jacksta

+0

एक प्रोग्रामर को हमेशा सबसे सरल समाधान के लिए नहीं जाना चाहिए, लेकिन डीबगिंग –

1
try this : 
    <?php 
    if (isset($_POST['username']) and isset($_POST['password'])) 
    { 

    $db_name = "testDB"; 
    $table_name = "auth_users"; 
    $connection = @mysql_connect("localhost", "user", "pass") or die(mysql_error()); 
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error()); 
    $sql = "SELECT * FROM $table_name WHERE username ='".$_POST['username']."' AND password = password('".$_POST['password']."')"; 
    $result = @mysql_query($sql, $connection) or die(mysql_error()); 
    $num = mysql_num_rows($result); 
     if ($num != 0) { 
      $cookie_name = "auth"; 
      $cookie_value = "ok"; 
      $cookie_expire = "0"; 
      $cookie_domain = "domain.com.au"; 
      setcookie($cookie_name, $cookis_value, $cookie_expire, "/", $cookie_domain, 0); 
      $display_block = " 
      <p><strong>Secret Menu:</strong></p> 
      <ul> 
       <li><a href=\"secretA.php\">secret page A</a> 
       <li><a href=\"secretB.php\">secret page B</a> 
      </ul>"; 
     } else { 
      header("Location: show_login.html"); 
      exit; 
     }; 


    } 
    else 
    { 
    header("Location: show_login.html"); 
    exit; 
    }; 
+0

अभी भी sajme परिणाम = फिर से लॉग इन करें! सुझाव – Jacksta

+0

के लिए धन्यवाद अभी भी वही त्रुटि lol –

0

इस तरह php के साथ कुकी सेट करके देखें:

setcookie(<name>,<value>, time()+3600*24); 

कभी कभी, स्थानीय होस्ट में, कुकीज़ का उपयोग करके सेट नहीं हैं: $_COOKIE[<name>] = <value>

2

यहाँ कुछ है कि आप में गड़बड़ हो सकता है है ...

setcookie($cookie_name,$cookis_value, $cookie_expire, "/", $cookie_domain, 0);

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