我在 index.php 中创建了一个登录表单,该表单的操作是 loginform.php ,所以我希望功能记住我 php中的复选框。this is loginform image
答案 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>