setcookie()没有创建cookie

时间:2015-08-06 07:49:52

标签: php cookies

我正在努力创造一个"记住我"基于我通过stackoverflow找到的答案登录。 它似乎无法正常工作,登录后只需创建PHP Session而不是创建PHP SessionCookie

Google Chrome开发者工具: enter image description here

index.php:     

    include('./config.php');
    include('./cookie-check.php');
    include('./redirect.php');

print_r($_SESSION);


    if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
        CheckCookieLogin();
        if(isset($_SESSION['userID'])) {
?>
<p>Logged In</p>
<a href="./action.php?a=logout">Logout</a>
<?php
        } else {
?>
<form method="post" action="./action.php?a=login">
    <input name="formName" type="text" placeholder="username" autocomplete="off" autofocus required />
    <input name="formPass" type="password" placeholder="username" autocomplete="off" required />
    <button type="submit">login</button>
</form>
<?php
        };
    } else {
?>
<p>Logged In</p>
<a href="./action.php?a=logout">Logout</a>
<?php
    };
?>

config.php

<?php
    $currentPage = basename($_SERVER['PHP_SELF']);
    session_start();

    $users = new mysqli("localhost", "root", "######", "web_users");
    if ($users->connect_errno) {
        printf("Connect failed: %s\n", $users->connect_error);
        exit();
    };
?>

action.php

<?php
    include('./config.php');
    include('./better_crypt.php');

    if(isset($_GET['a'])) {
        $action = $_GET['a'];

        if($action == 'login') {
            $formName = $_POST['formName'];
            $formPass = $_POST['formPass'];
            $ip = $_SERVER['REMOTE_HOST'];

            $checkName = $users->prepare("SELECT userID,userPass FROM users WHERE userName=? LIMIT 1");
            $checkName->bind_param("s", $formName);
            $checkName->execute();
            $checkName->store_result();
            if($checkName->num_rows > 0) {
                $checkName->bind_result($userID,$userPass);
                while($checkName->fetch()) {
                    if(hash_equals($userPass, better_crypt($formPass,$userPass))) {
                        $_SESSION['userID'] = $userID;
                        $_SESSION['user_is_loggedin'] = 1;

                        $cookiehash = md5(sha1($formName . $ip));
                        setcookie("uname",$cookiehash,time()+3600*24*365,'/','fmadev.fma.uk.com');

                        $remember = $users->prepare("UPDATE users SET login_session=? WHERE userID=?");
                        $remember->bind_param("si", $cookiehash,$userID);
                        $remember->execute();
                        $remember->close();
?>
<p>Logged In</p>
<?php
                    } else {
?>
<p>Invalid Password</p>
<?php
                    };
                };
            } else {
?>
<p>Invalid Username</p>
<?php
            };
            $checkName->close();
        } else if($action == "logout") {
            if(isset($_SESSION['userID'])) {
                $userID = $_SESSION['userID'];

                $logout = $users->prepare("UPDATE users SET login_session=null WHERE userID=?");
                $logout->bind_param("i", $userID);
                if($logout->execute()) {
                    $_SESSION['cookie'] = $uname;
                    setcookie("uname",$uname,0,'/','fmadev.fma.uk.com');
                    session_unset();
?>
<p>Logging out</p>
<?php
                } else {
?>
<p>Unable to logout, try again...</p>
<?php
                };
                $logout->close();
            } else {
?>
<p>You must be logged in first</p>
<?php
            };
        } else {
?>
<p>A valid action is required</p>
<?php
        };
    } else {
?>
<p>An action is required</p>
<?php }; ?>

cookie-check.php

<?php
    function CheckCookieLogin() {
        $uname = $_COOKIE['uname'];
        if (!empty($uname)) {
            $users = new mysqli("localhost", "root", "######", "web_users");
            if ($users->connect_errno) {
                printf("Connect failed: %s\n", $users->connect_error);
                exit();
            };

            $check = $users->prepare("SELECT userID FROM users WHERE login_session=? LIMIT 1");
            $check->bind_param("s", $uname);
            $check->execute();
            $check->store_result();
            if($check->num_rows > 0) {
                    $_SESSION['user_is_loggedin'] = 1;
                    $_SESSION['cookie'] = $uname;
                    setcookie("uname",$uname,time()+3600*24*365,'/','fmadev.fma.uk.com');

                $check->bind_result($userID);
                while($check->fetch()) {
                    $_SESSION['userID'] = $userID;
                };
            };
            $check->close();
        };
    };
?>

在此代码中是否有原因导致cookie未被创建?

1 个答案:

答案 0 :(得分:0)

我通过IP而不是域名连接到网站,因此没有创建cookie。