如何使用php在登录表单中添加“记住我”功能

时间:2017-05-16 15:59:59

标签: cookies session-variables

我在 index.php 中创建了一个登录表单,该表单的操作是 loginform.php ,所以我希望功能记住我 php中的复选框。this is loginform image

1 个答案:

答案 0 :(得分:0)

原始剧本

表格

> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
> Username: <input type="text" name="username" maxlength="40"> Password:
> <input type="password" name="pass" maxlength="50"> <input
> type="submit" name="submit" value="Log in"> </form>

一个非常简单的登录表单,其中包含用户名,密码和提交按钮的字段。我还应该在这一点上提到,为了本教程的简单起见,我使用“PHP_SELF”(表单操作代码包含在同一个文件中)我建议将所有脚本保存在单独的文件中以供实际开发。 / p>

php

出于安全原因,以及我不泄露我的所有秘密,我不会在这里分享整个登录脚本。如果您还在阅读本教程,我假设您具有PHP的工作知识,实际上是您正在尝试改进的登录脚本,因此这应该不是问题。

连接到我的数据库并执行所有验证检查后,我将使用以下代码登录已验证的用户:

 $hour = time() + 3600;
    setcookie('ID_my_site', $_POST['username'], $hour);

//then redirect them to the members area
header("Location:example-page.php");

上面我只设置了两个持续一小时的cookie,一个用于用户名,一个用于密码,并将它们重定向到成员区域。

添加记住我的功能

表格

首先,我们需要为我们的表单提供一个记住我的复选框。添加这个使我们的表单看起来像这样:

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
Username:
<input type="text" name="username" maxlength="40">
Password:
<input type="password" name="pass" maxlength="50">
<input type="checkbox" name="remember" value="1">Remember Me
<input type="submit" name="submit" value="Log in">
</form>

php

现在我们需要让这个复选框做一些事情。也就是说,选中后,请记住用户的用户名,并将其放置在每个相应的登录页面访问的用户名字段中。为此,我决定使用cookies。我无法使用上面设置的“ID_my_site”用户名cookie,因为每次用户退出时都会被杀死。解决方案是创建一个名为“remember”的额外cookie,它也存储用户名,如下所示:

$year = time() + 31536000;
setcookie('remember_me', $_POST['username'], $year);

上面我们添加了这个额外的cookie,持续一年,这样当用户登录时会创建一个包含用户用户名的附加cookie。但是,目前尚未使用。改变:

<input type="text" name="username" maxlength="40">

为:

<input type="text" name="username" maxlength="40" value="<?php
echo $_COOKIE['remember_me']; ?>">
我们的登录表单中的

现在将此用户名存储在文本字段中以供将来访问:

我们还没有完成。目前,代码正在为每个用户存储此信息。我们希望它只记住那些专门请求此功能的用户。为此,我们在创建附加cookie之前运行一个简单的检查。此检查查看是否已选中“记住我”复选框,并且仅创建我们的新cookie(如果有)。像这样:

if($_POST['remember']) {
setcookie('remember_me', $_POST['username'], $year);
}
elseif(!$_POST['remember']) {
    if(isset($_COOKIE['remember_me'])) {
        $past = time() - 100;
        setcookie(remember_me, gone, $past);
    }
}

上面的代码还处理了存在cookie的情况,但是用户已经确定他们不再想要被记住,通过将任何现有的cookie设置为过去的时间,基本上将其杀死。

进一步改进

上述代码的确实现了本教程的主要目的,即在用户请求时记住用户的用户名。但是,为了进一步提高可用性,我希望在用户请求记住时自动检查复选框,并在没有请求时取消选中。将其添加到我们的表单中为我们提供了最终的表单代码:

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
Username:
<input type="text" name="username" maxlength="40" value="<?php
echo $_COOKIE['remember_me']; ?>">
Password:
<input type="password" name="pass" maxlength="50">
<input type="checkbox" name="remember" <?php if(isset($_COOKIE['remember_me'])) {
        echo 'checked="checked"';
    }
    else {
    echo '';
}
?> >Remember Me
<input type="submit" name="submit" value="Log in">
</form>