PHP中的用户授权问题

PHP中的用户授权问题,php,Php,我正在尝试构建一个简单的用户授权系统,其中.txt文件存储用户名和密码信息。我知道这可能应该以不同的方式进行(通过数据库),但我这样做是为了练习。如果有人能帮我解答问题,我将不胜感激 到目前为止,我已经构建了register.php和login.php,但我不确定从这里可以走到哪里。以下是我的三个问题: 假设我有一个html站点,我想保护它。如何合并login.php,以便在未登录的用户尝试访问页面内容时,提示他们登录?我是否需要在每个html页面的页面中添加一些内容 在此过程中,我将如何实现c

我正在尝试构建一个简单的用户授权系统,其中.txt文件存储用户名和密码信息。我知道这可能应该以不同的方式进行(通过数据库),但我这样做是为了练习。如果有人能帮我解答问题,我将不胜感激

到目前为止,我已经构建了register.php和login.php,但我不确定从这里可以走到哪里。以下是我的三个问题:

  • 假设我有一个html站点,我想保护它。如何合并login.php,以便在未登录的用户尝试访问页面内容时,提示他们登录?我是否需要在每个html页面的页面中添加一些内容

  • 在此过程中,我将如何实现cookies?登录的用户在20分钟内不必重新登录。理想情况下,我希望在用户登录后发送cookies,但我该如何做呢

  • 我希望我的register.php检查现有用户,以便所有名称都是唯一的。到目前为止,我所做的并不正确。我的代码有什么问题

  • 这是我的密码:

    LOGIN.PHP

    <?php
    
    $check = 0;
    if (isset($_POST['submit']))
    {
    
    $name = htmlentities($_POST['name']);
    $name = strtolower($name);
    $password = htmlentities($_POST['apw']);
    $filename = getcwd() . "/psverification.txt";
    $lines = file( $filename , FILE_IGNORE_NEW_LINES );
    printf ("Hi %s,</br />", $name);
    foreach($lines as $key => $line)
    {
        list($username, $pw) = explode('|', $line);
        if($username == $name && $pw == $password)
    $check++;
    break;  
    }
    if ($check == 1){
    //Redirect to home page
    Header("Location: index.html");
    }
    else{
    printf("Your username or password are invalid. Please try again.");
    
    }
    
    }
    
    ?>
    
    <form method = "POST" action = "<?php echo $_SERVER['PHP_SELF']; ?>">
    <p>
    Username:<br />
    <input type = "text" id="name" name="name" size="20" maxlength="40" />
    </p>
    
     <p>
     E-mail Address:<br />
     <input type = "text" id="apw" name="apw" size="20" maxlength="40" />
     </p>
    
     <input type="submit" id="submit" name ="submit" name ="submit" value="Log in" />
    
     <p>
     <a href="register.php">Register</a></p>
     </form>
    
    
    问题1:

    你可能会利用。所有页面都将使用此功能。如果用户未登录,则将其重定向到登录页面。一般来说,这是良好的做法。该文件还可能包括通用函数或其他用户信息

    问题2:

    你不必使用饼干。相反,我会考虑。在这里,您将存储它们是否登录到服务器端

    问题3:


    请在单独的SO问题中提问。您需要定义“不起作用”的含义。你试过调试它吗?你试过什么

    我会回答你的第三部分:

    根据您编写的代码,它将只检查提供的用户名和列表中的第一个用户名。如果这些不匹配,则写入文件并重定向。你看,你没有检查整个用户名列表

    试试这个:

    $match_found = false;
    
    while (($buffer = fgets($fh, 4096)) !== false)
    {
        // Parse the line
        list($usercheck, $passwordcheck) = explode('|', $buffer);
        if (trim($usercheck) == $username)
        {
            print "The username is already in our system.  Please use another one.";
            $match_found = true;
            break;
        }
    }
    
    if(!$match_found)
    {
        fwrite($fh, $data);
        //Redirect to home page
        Header("Location: index.html");
    }
    

    关于您的第一个问题,我可能会考虑使用PHP来确保只有经过验证的用户才能看到该页面。您可以有一个模型,其中一个登录页面用于初始登录(或者在任何页面上都有一个表单,用于将数据发送到PHP登录页面),用户需要登录才能查看的所有页面都可以首先检查是否有有效的会话。如果当前会话无效,则可以使用重定向头发送登录页面。
    在任何给定页面上,一个简单的实现都可能是这样的:

    <?php
    session_start();
    if($_SESSION['loggedin'] !== 1) {
        header('Location: login.php');
        exit;
    }
    ?>
    
    
    
    您可能应该将此问题分解为单独的问题。至少是#3部分,因为它不是概念性的,但是您的实际代码。同意。单独的、更具体的问题会更合适。@谢谢你的回答。我希望我能把每个人的回答都标记为“接受”…他们都帮了我很大的忙。这很有效。谢谢如果你愿意,我可以问另一个问题,并将其标记为已接受的答案(因为其他人建议这是一个问题本身)。只要告诉我,我很高兴这有帮助。如果你的问题已经解决了,我不认为有必要提出一个单独的问题。干杯,太棒了!是否有可能包含某种形式的cookie,以便来自同一台计算机且已登录的用户不必这样做?谢谢您的帮助。能给我举一个如何使用php的include的例子吗?这很简单。在网站的根目录中创建一个名为global.php的文件。然后添加
    include'/global.php'到任何页面的顶部。该页面中的代码将像在每个页面中一样执行;在我所有内容页面的顶部?这是否意味着用户必须登录每个页面?否,全局将包含代码检查用户是否有权访问该页面。如果没有,他们会被重定向。
    
    <?php
    session_start();
    if($_SESSION['loggedin'] !== 1) {
        header('Location: login.php');
        exit;
    }
    ?>