2014-04-28 83 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