PHP不设置cookie但会设置会话

时间:2014-04-28 22:28:58

标签: php login

我已经创建了一个适用于sessiosn而不是cookie的登录..这是我的login.php代码

          <?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;   
        }
    }

但是当我关闭broswer时,cookie不能保存,就像我已经完全注销一样。 会议工作正常..

这里也是我的logout.php

session_start();
session_destroy();

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

header("Location: login.php");

2 个答案:

答案 0 :(得分:0)

好像你正在设置$ rem,而不是$ rememberme。将行更改为:

$rememberme = $_POST['rememberme'];

只是为了警告你,如果有人想登录这个方法,他们所要做的就是在cookie和宾果游戏中设置一个用户名!

查看已接受的答案here以获得一个好的方法。

虽然我正在使用它,但您还需要保护自己免受SQL注入攻击,这是您当前的代码所开放的。看here

答案 1 :(得分: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;   
        }