2014-04-28 79 views
0

我已經作出,對於sessiosn工作,但沒有餅乾..這是我的login.php代碼PHP不設置cookie但並設置

  <?php 



    include 'functions.php'; 
    if(loggedin()){ 
     header("Location: index.php"); 
     exit(); 
    } 
    if(isset($_POST['login'])){ 

     $username=$_POST['username']; 
     $password=$_POST['password']; 
     if(isset($_POST['rememberme'])) { 
      $rem=$_POST['rememberme']; 
     } else { $rememberme=""; } 

     if($username&&$password){ 
     $login = mysql_query("SELECT * FROM users WHERE username='$username'"); 

     while($row = mysql_fetch_assoc($login)){ 
      $db_password = $row['password']; 
      if($password == $db_password){ 
       $loginok= TRUE; 
      } 
      else{ 
       $loginok= FALSE; 
      } 

      if($loginok==TRUE) 
      { 
       if($rememberme=="on"){ 
        setcookie("username",$username, time() + 7200); 
       }else if ($rememberme==""){ 
       $_SESSION['username'] = $username;} 
       header("Location: index.php"); 
       exit(); 
      } 
      else 
       die("Incorrect Username/Password"); 
     } 
     } 
     else 
     die("Please enter a username and password");   
    } 

登錄名和我的functions.php會議

 <?php 

     session_start(); 


    $host = "localhost"; 
    $user = "root"; 
    $pass = ""; 
    $db = "loginphp"; 


    mysql_connect($host, $user, $pass) or die("Couldn't connect"); 
    mysql_select_db($db); 

    function loggedin() 
    { 
     if(isset($_SESSION['username'])||(isset($_COOKIE['username']))) 
     { 
     $loggedin = TRUE; 
     return $loggedin; 
     } 
    } 

但是當我關閉瀏覽器時,cookie不會保存,它就像我已經完全註銷一樣。 會議做工精細..

這裏是我的logout.php以及

session_start(); 
session_destroy(); 

setcookie("username","",time() - 7200); 

header("Location: login.php"); 

回答

0

好像你設置$ REM,而不是$了rememberMe。該行更改爲:

$rememberme = $_POST['rememberme']; 

只是爲了提醒你,雖然,用這種方法,如果有人想登錄,所有他們必須做的是設置一個cookie和賓果用戶名!

看看接受的答案here爲好方法。

雖然我在做這件事,但您還需要保護自己免受SQL注入攻擊,這是您當前的代碼可以使用的攻擊。看看here

+0

你好,謝謝你傑克!那就是訣竅! 你能很快指導我如何防止這種情況發生? 最好的問候, – user3470966

+0

我已經在php讀過md5,會停止這個問題嗎? – user3470966

+0

爲你添加了一個資源 – happyjack

0

我改變了你的cookie的格式,讓它可以存活30天,不管你應該總是在設定的時間內驗證數據。您分配了$ _ POST到$ REM不是$了rememberMe所以我糾正你的函數:

if($loginok==TRUE) 
      { 
       if($rem=="on"){ 
        setcookie('username', $username, time() + (60 * 60 * 24 * 30)); // expires in 30 days 
       }else if ($rem==""){ 
        $_SESSION['username'] = $username;} 
        header("Location: index.php"); 
        exit(); 
      } 

我建議你重新考慮你是如何處理的記得我登錄,也許你應該拿出一個哈希值您可以在cookie中以加密格式存儲並在服務器端進行驗證。這"hash"應改變在每次訪問等。只是一個建議。

function loggedin() 
    { 
     if(isset($_SESSION['username'])||(isset($_COOKIE['username']))) 
     { 
     $loggedin = TRUE; 
     return $loggedin; 
     } 
+0

我已經在php中讀過md5,會停止這個問題嗎? 非常感謝,這對我們有很大的幫助。 – user3470966

+0

我不會使用MD5,您應該閱讀有關bcrypt的內容。 – Skewled