Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cookie和会话登录php_Php_Cookies_Login_Session Cookies - Fatal编程技术网

使用cookie和会话登录php

使用cookie和会话登录php,php,cookies,login,session-cookies,Php,Cookies,Login,Session Cookies,我想得到一个简单的登录表单,对于已签名的用户,它必须说“你好,登录”,但cookies不起作用,它总是像我没有登录一样。请帮帮我,我做错了什么? 这是我的html文件: <form action="index.php" method="post"> <input type="text" name="login"/> <input type="password" name="password"/> <input type="subm

我想得到一个简单的登录表单,对于已签名的用户,它必须说“你好,登录”,但cookies不起作用,它总是像我没有登录一样。请帮帮我,我做错了什么?
这是我的html文件:

<form action="index.php" method="post">
    <input type="text" name="login"/>
    <input type="password" name="password"/>
    <input type="submit" value="LOGIN"/>
</form>

和php:

 <?php
        session_start(); 
        $login = $_POST['login'];
        $password = $_POST['password'];

        function getUsers()
        {
            return array('test'=>'123','jack'=>'345');
        }

        function checkLoginPassword($login, $password)
        {
            $users=getUsers();
            if(!isset($users[$login]))
                return false;
            if($users[$login] != $password)
                return false;
            return true;
        }

        function login($login,$password)
        {
            if(!checkLoginPassword($login,$password)) {
                return false;
            }
            $id = rand(1,100);
            setcookie('user_session',$id,time()+86400);
            $_SESSION['user_'.$id]=$login;
        }

        function isLoggedIn()
        {
            if(!isset($_COOKIE['user_session']))
                return false;
            $id=(int)$_COOKIE['user_session'];
            if(!isset($_SESSION['user_'.$id]))
                return false;
            return true;
        }

        if (isLoggedIn()){
            echo "Hello, ".$login; 
        }
        else echo "You are not signed in!";


这个解决方案不好,但实际上要回答您的问题,问题是$id没有设置在这里。在php中,即使在html中按login,也没有本地或全局的$id

这个函数一点也没有提到

你需要把它放在你的代码中,然后它就可以工作了

if (!empty($_POST)) {
    $login = $_POST['login'];
    $password = $_POST['password'];

    login($login, $password);
}

为什么要使用常规cookie和会话?登录用户,为用户设置uuid,将其保存到服务器并将其作为cookie发送给用户,然后使用会话跟踪用户的详细信息是常见的解决方案。(即,当用户返回时,会话将过期,但Cookie中的uuid可用于验证用户并重新启动会话)。这里的用法是错误的,但是cookies+会话是解决这个问题的常用方法。Cookie和会话-不-具有相同的用途。相反,它们在这样的场景中是相辅相成的。
if (!empty($_POST)) {
    $login = $_POST['login'];
    $password = $_POST['password'];

    login($login, $password);
}