登录表单发送后我的cookie未设置

时间:2016-10-09 20:51:33

标签: php ajax session cookies session-cookies

我有一个登录脚本和一个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个镀铬标签只是为了解决这个问题。我可能会忽略一个小细节。 Login Page Link

如果我从函数脚本

中删除&& $_COOKIE['MCLatestUser'],它就有效

2 个答案:

答案 0 :(得分:0)

setcookie('MCLatestUser', $token, 31622400, '/');

这个方法在第三个参数中有一些问题。它应该基于当前时间。

PHP: setcookie - Manual

答案 1 :(得分:0)

我明白了。事实证明这是浏览器的错。我在Microsoft Edge和Mozilla Firefox上尝试过它并且有效。所以我查看了这个问题,而我所要做的只是clear my cookies and site data在chrome上。感谢那些帮助过的人和那些想要但不能/没有的人。