在发送登录表单后,不会设置我的cookie


My cookies are not being set after the login form has been sent

我有一个登录脚本和一个functions.php脚本来检查是否设置了会话用户名和cookie。当用户登录时,如果他们选择记住我,则应该设置cookie。但问题是,脚本可以工作,但cookie没有设置,所以用户没有登录。我在这里搜索了很多主题,并尝试了尽可能多的解决方案,但我仍然得到了相同的结果,或者最终给了我更多的错误。

                          if (isset($_POST['rem']) && $_POST['rem'] == 'on') > {
                              setcookie('MCLatestUser', $token, 31622400, > '/');
                                session_regenerate_id(true);
                            }

如果选中了"记住",这是应该设置cookie的代码部分。

Log.php(由于我使用ajax登录脚本,url设置为这样(:

<?php
include_once 'db.php';
include_once 'functions.php';
error_reporting(-1);
if(isset($_POST['email'])) {
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_STRING);
    $password = $mysqli->real_escape_string($_POST['password']);
    try {
        $check = mysqli_query($mysqli, "SELECT * FROM users WHERE email='$email'");
        $res = mysqli_num_rows($check);
        if($res > 0) {
            while($run = mysqli_fetch_array($check, MYSQLI_ASSOC)) {
                $blocked = $run['blocked'];
                $deactivated = $run['deactivated'];
                $paused = $run['paused'];
                $verified = $run['verified'];
                $rank = $run['rank'];
                $token = $run['token'];
                $pass = $run['password'];
                $pbackup = $run['pbackup'];
                if($verified == 'true') {
                    if($blocked == 'true') {
                        echo 'Looks like your account was blocked. If you think this is an error, please contact an admin via support@mclatest.com';
                    } else if($deactivated == 'true') {
                        echo 'Looks like your account has been deactivated. If you think this is an error, please contact an admin via support@mclatest.com';
                    } else if($paused == 'true') {
                        echo 'Looks like your account is frozen. If you think this is an error, please contact an admin via support@mclatest.com';
                    } else {
                        if(password_verify($password, $pass)) {
                            $timestamp = time();
                            // Authenticated, set session variables
                            $_SESSION['username'] = $run['username'];
                            if (isset($_POST['rem']) && $_POST['rem'] == 'on') {
                                setcookie('MCLatestUser', $token, 31622400, '/');
                                session_regenerate_id(true);
                            }
                            $sql = mysqli_query($mysqli, "UPDATE users SET Ip = '$ipaddress', login_ip = '$ipaddress', latest_login_date = '$now', login_date = '$date', login_time = '$time', login_day = '$day', login_month = '$month', login_year = '$year', status = '$timestamp' WHERE email = '$email'");
                            if($sql) {
                                echo "Success!";
                            } else {
                                echo "Error login in";
                            }
                            // do stuffs
                        } else if(password_verify($password, $pbackup)) {
                            $timestamp = time();
                            // Authenticated, set session variables
                            $_SESSION['username'] = $run['username'];
                            if (isset($_POST['rem']) && $_POST['rem'] == 'on') {
                                setcookie('MCLatestUser', $token, 31622400, '/');
                                session_regenerate_id(true);
                            }
                            $sql = mysqli_query($mysqli, "UPDATE users SET Ip = '$ipaddress', login_ip = '$ipaddress', latest_login_date = '$now', login_date = '$date', login_time = '$time', login_day = '$day', login_month = '$month', login_year = '$year', status = '$timestamp' WHERE email = '$email'");
                            if($sql) {
                                echo "Success!";
                            } else {
                                echo "Error login in";
                            }
                            // do stuffs
                        } else {
                            echo "<h4 style='font-weight:bold;font-family:arial;margin:8px'>Your password is incorrect, please try again. If you still get this error after using your backup password, please <a href='https://mclatest.com/community/reset.php?r=password'>reset</a> your password</h4>";
                        }
                    }
                } else {
                    echo "<h4 style='font-weight:bold;font-family:arial;margin:8px'>You need to verify your account. Please click this link to <a href='https://mclatest.com/community/confirm.php?email=".$email."&token=".$token."'>verify your account</a></h4>";
                }
            }
        } else {
            echo 'No records of that user have been found!';
        }
    } catch(PDOException $e){
        echo $e->getMessage();
    }
} else {
    echo "Invalid email";
}

Login.php(html和ajax格式(:

<form id="login_form" style="text-align:center" method="post">
                                <script>
                                    $(document).ready(function() {
                                        $("#login").click(function(e) {
                                            e.preventDefault();
                                            var email = $("#email").val();
                                            if (email = "") {
                                                $("#error_msg").html("<h4>Email cannot be empty</h4>");
                                            } else {
                                                var data = $("#login_form").serialize();
                                                $.ajax({
                                                    type: "POST",
                                                    url: "../inc/log.php",
                                                    data: data,
                                                    beforeSend: function() {
                                                        $("#error_msg").fadeOut();
                                                        $("#login").val('sending ...');
                                                    },
                                                    success: function(data) {
                                                        if (data == "Success!") {
                                                            // alert("Works"); //for testing purposes
                                                            window.location.href = "index.php";
                                                        } else {
                                                            $("#error_msg").fadeIn(1000, function() {
                                                                $("#error_msg").html('<div style="border:1px solid: red; background:rgba(255,0,0,0.9;)">'+data+'!</div>');
                                                                $("#login").val('Login');
                                                            });
                                                        }
                                                    },
                                                    error: function(data) {
                                                        alert("Process Failed!");
                                                    }
                                                });
                                                return false;
                                            }
                                        });
                                    });
                                </script>
                                <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label ">
                                    <label for="input_email" class="mdl-textfield__label">Email</label>
                                    <input type="email" name="email" class="mdl-textfield__input" maxlength="255" id="input_email" />
                                </div>
                                <br>
                                <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
                                    <label for="input_password" class="mdl-textfield__label">Password</label>
                                    <input type="password" name="password" class="mdl-textfield__input" maxlength="255" id="input_password" />
                                </div>
                                <br>
                                <label style="width:auto !important" for="remember_me" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" >
                                    <input name="rem" type="checkbox" id="remember_me" class="mdl-checkbox__input" checked />
                                    <span class="mdl-checkbox__label">Stay logged in?</span>
                                </label>
                                <br>
                                <nav style="width:auto !important;display:-webkit-box;-webkit-box-pack:center" class="mdl-navigation">
                                    <a class="mdl-navigation__link" href="forgot.php?ftype=password">Forgot Password?</a>&nbsp; | &nbsp;
                                    <a class="mdl-navigation__link" href="register.php">Register?</a>
                                </nav>
                                <br>
                                <input type="submit" id="login" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect" name="login" value="Login"/>
                            </form>

functions.php(这是脚本中用于检查会话和cookie变量的部分(:

function loggedIn() {
    if (isset($_SESSION['username']) && !empty($_SESSION['username']) && isset($_COOKIE['MCLatestUser'])) {
        return true;
    } else {
        return false;
    }
}

脚本有效,但没有发送cookie。我已经无计可施了,已经为此工作了4-5个多小时,打开了35多个镀铬标签来解决这个问题。我可能忽略了一个小细节。登录页面链接

如果我从函数脚本

中删除&& $_COOKIE['MCLatestUser'],它就会起作用
setcookie('MCLatestUser', $token, 31622400, '/');

该方法在第三个参数中存在一些问题。它应该以当前时间为基础。

PHP:setcookie-手动

我想明白了。原来是浏览器的错。我在微软Edge和Mozilla Firefox上试用过,效果很好。所以我四处寻找这个问题,我所要做的就是在chrome上使用clear my cookies and site data。感谢那些提供帮助的人和那些想但不能/没有的人。