使用cookie检查是否已登录

时间:2016-06-13 18:55:23

标签: php html session cookies

您好我正在尝试获取我成功创建的Cookie,并将其与字符串进行比较。

问题在于,如果用户直接访问该页面,则会显示所有内容,我不希望这种情况发生,我想将用户重定向到登录页面。

基本上如果它说是,它只会显示页面,如果没有cookie或设置为否,它会将我重定向到登录。

我正在尝试使用PHP。这就是我的尝试。

<?php
        $value = "Yes";
        if(isset($_COOKIE['user']) && $_COOKIE['user'] == $value)
        {
?>

<!------- HTML code goes here ------->

<?php

        }
        else{
            $cookie_name = "user";
            $cookie_value = "No";
            setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
            header("Location: index1.html");
        }

?>

这是我要调用的php,基本上检查用SQL数据库输入的详细信息。

<?php
    $username = $_POST['username'];
    $password = $_POST['password'];

    $conn = mysqli_connect("localhost", "root", "", "accounts");
    if (mysqli_connect_errno()){
        echo "Error: Could not connect to database. Please try again later";
        exit;
    }

    $query="SELECT * FROM accounts WHERE username='$username' AND password='$password'";

    $result = mysqli_query($conn, $query)
    or die("Error in query: ". mysqli_error($conn));

    $number_of_rows = mysqli_num_rows($result);

    if($number_of_rows == 1 ){
        $cookie_name = "user";
        $cookie_value = "Yes";
        setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day

        header("Location: main.html");
        exit;
    }
    else{
        $cookie_name = "user";
        $cookie_value = "No";
        setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
        header("Location: index2.html");
    }
?>

有人可以帮我弄明白怎么做吗?我尝试了不同的代码,并尝试了会话,但没有运气。我已经成功存储了cookie,但似乎无法解决这个问题。

由于

3 个答案:

答案 0 :(得分:1)

使用'服务器端会话',如@maria所述,将使用服务器资源中的大量内存。尽可能避免在网页上使用$ _SESSION。

使用此功能,并在页面加载时阅读Cookie值,以便快速访问您的网站。干燥:

if(isset($_COOKIE['user']) {
    // Save the session_id in the cookie to do your stuff in cookie data. Use explode for multiple values in the cookie.
    // check the session_id in the cookie on every page load
    // when not available, recheck, and reset the cookie
}

答案 1 :(得分:0)

会话是最好的选择,但是如果你想使用cookie,那么试试这个

<?php

    }
    else{
    $cookie_name = "user";
        $cookie_value = "No";
        setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
        ?>
        <a href="index1.html">Reload the page</a>
        <?php
    }

?>

答案 2 :(得分:0)

不使用Cookie,而是使用服务器端会话:)

<?php
    $value = "Yes";
    if(isset($_COOKIE['user']) && $_COOKIE['user'] == $value)
    {
?>

会是这样的:

    <?php
$value = 'yes';

if (isset($_SESSION['user'])) {
     if ($_SESSION['user'] == $value) {
        do something..
    }
}

<?php

    }
    else{
    $cookie_name = "user";
        $cookie_value = "No";
        setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); 
        header("Location: index1.html");
    }

?>

将是:

<?php

    }
    else{
    $cookie_name = "user";
        $cookie_value = "No";
        $_SESSION[$cookie_name] = $cookie_value;
        header("Location: index1.html");
    }

?>

总代码:

     <?php
$value = 'yes';

if (isset($_SESSION['user'])) {
     if ($_SESSION['user'] == $value) {
        do something..
    }
}  else{
        $cookie_name = "user";
            $cookie_value = "No";
            $_SESSION[$cookie_name] = $cookie_value;
            header("Location: index1.html");
        }

?>