2009-05-13 9 views
5

इम में ठीक से सेट कर रहे हैं किया जा रहा है और कुकी का उपयोग करने का प्रयास करें, लेकिन यह मेरी साइट में woking नहीं है, किसी को भी मुझे मार्गदर्शन कर सकते हैं कृपया, क्या मेरी कोड में गलत हो रहा है:कुकीज़ नहीं बहुत php में नए पीएचपी स्क्रिप्ट

<?php 
session_start(); 
?> 
<script> 
function Redirect(url) 
{ 
location.href = url; 
} 

</script> 
<?php 

define('_VALID_ACCESS', true); 
include_once "includes/connect.php"; 
include_once "includes/login.php"; 


if(empty($_POST['loginname']) || empty($_POST['password'])) 
{ 
    $msg = "User or password is empty"; 
} 
else 
{ 
    if(login($_POST['loginname'], $_POST['password']) == true) 
    { 
     $usern = $_POST['loginname']; 
     session_register('loginname'); 
     $loginname = $usern;   
     sleep(1); 
      if(activestatus($_POST['loginname'], $_POST['password']) == true) 
      { 
      $usern = $_POST['loginname']; 
      session_register('loginname'); 
      $loginname = $usern;   
      sleep(1); 

      $hour = time() + 3600; 
      setcookie("ID_my_site", $_POST['loginname'], $hour); 
      setcookie("Key_my_site", $_POST['password'], $hour); 
      $test = $_COOKIE["ID_my_site"]; 
      $msg = "<script> Redirect ('home.html?testname=".$test."')</script>"; 
      //header("Location: home.html"); 
      } 
      else 
      { 
      $msg = "<script> Redirect ('valid.php?testname=".$usern."')</script>"; 
      } 

    } 
    else 
    { 
     $msg = "<font color=red>User or Password is wrong</font>"; 
    } 
} 
echo '<div id="divTarget">' . $msg . '</div>'; 
?> 
    <link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection"> 
    <link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print"> 
    <link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection"> 
<body> 
<div class="container" id="login_container"> 
<form id="login" action="action.php" method="post" name="loginform" > 
    <fieldset id="login_screen" style="width:350px"> 
     <label id="login_label" for="login">User Login </label> 
     <br><br> 
     <label for="login">Email Address</label> 
     <input type="text" name="loginname" id="loginname" value="[email protected]">  
     <p id="space"><label for="password">Password</label> 
     <input type="password" id="password" name="password" value="********" ></p> 
     <input type="checkbox">Keep me signed in until i signout 
     <p id="test"><input type="submit" value="Submit"></p> 
     <a href="forgetpassword.html">Forgot 
     your password</a>&nbsp;&nbsp;|<span id="free">Not a member?</span><a href="regForm.html">Sign up</a><blink><span id="free">Free</span></blink> 
     </p> 
    </fieldset> 
</form> </div> 
</body> 
+0

आप मिल सकती है [ 'नई कुकी ($ नाम)' ] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie।php # L51) सहायक, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP- कुकी)। – caw

उत्तर

6

display_errors चालू करें और अपने error_reporting सेट E_ALL पर और आपको 'हेडर पहले से भेजे गए' के ​​बारे में एक त्रुटि संदेश देखना चाहिए - आपको किसी भी HTML IS SENT से पहले सेटकुकी() को कॉल करना होगा। php.net/setcookie से:

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

कोड ब्लॉक है कि आप इस बिट पोस्ट में:

<script> 
function Redirect(url) 
{ 
location.href = url; 
} 

</script> 

सीधे उत्पादन किया जा रहा है ब्राउज़र को अच्छी तरह से इससे पहले कि आप कभी कुकी सेट करने का प्रयास है।

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

2

1 आपको session_register की आवश्यकता नहीं है, आप बस कर सकते हैं।

के बाद से session_register 4.1.0 के बाद से पसंदीदा तरीका है और PHP 5,3

$_SESSION["loginname"] = $_POST["loginname"] 

2 के रूप में पदावनत आप सत्र का उपयोग करने के बाद से यह काम नहीं करता, अपने प्रवाह बेहतर हो सकता है, जा रहे हैं।

$_SESSION["foo"] = 1; 
header("Location: stuff.php"); 

तब आप stuff.php में सत्र डेटा नहीं देख सकते हैं। आप या तो उपयोगकर्ता को मुख्य पृष्ठ पर भेज सकते हैं, और वहां प्रमाणीकरण कर सकते हैं, और यदि यह गुजरता है तो आप मुख्य पृष्ठ की लोडिंग के साथ ही जारी रखते हैं, और यदि ऐसा नहीं होता है, तो आप उपयोगकर्ता को लॉगिन पर वापस भेजते हैं इस तरह का पेज।

if($_SESSION["authenticated"] == 0) 
{ 
    header("Location: login.php"); 
    die(); 
} 
+0

धन्यवाद मैं सिर्फ सीखने के चरण में शुरू कर रहा हूँ। – jbcedge

+0

क्यों सामग्री.पीपी सत्र डेटा देखने में सक्षम नहीं होगा? मुझे लगता है कि आप तार्किक रूप से मतलब है कि वह stuff.php सत्र परिवर्तनीय "foo" मान की सेटिंग के बजाय सत्र डेटा तक पहुंचने में सक्षम नहीं होना चाहता है stuff.php में दिखाई नहीं देगा? –

+0

यदि आप एक HTTP शीर्षलेख रीडायरेक्ट करते हैं तो सत्र डेटा सर्वर पर नहीं लिखा जाता है। जब तक आप इसे विशेष रूप से सर्वर पर लिखे जाने के लिए बताते हैं जैसे session_write_close() http://is.php.net/manual/en/function.session-write-close.php –

3

इस (आपकी साइट के रूट को निर्दिष्ट) का प्रयास करें:

setcookie("ID_my_site", $_POST['loginname'], $hour,'/'); 

या इस (अपने LOGINNAME को उद्धरण जोड़ने) का प्रयास करें:

setcookie("ID_my_site", "$_POST['loginname']", $hour,'/'); 
1

इसके अलावा आपको पासवर्ड संग्रहित नहीं करना चाहिए कुकी डेटा है - यह एक बड़ी सुरक्षा है नो-नहीं !!!

आप कुछ करने के लिए इस तरह एक अनूठा सेट चाहते हैं - यादृच्छिक - पहचानकर्ता बदलता है कि जब वे के लिए लॉग इन इसके बजाय उसका उपयोग (आप अभी भी इसे MD5 चाहिए)

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