我应该如何处理';记住我';PHP登录期间的选项?

我应该如何处理';记住我';PHP登录期间的选项?,php,cookies,pdo,setcookie,Php,Cookies,Pdo,Setcookie,我正在用PHP建立一个网站,但我不确定应该如何处理用户在登录过程中使用的“记住我”选项 我不确定是将用户名和密码保存在JavaScript存储中,并在再次提示用户登录时自动填充它(我怀疑这个选项,因为它会非常不安全),还是以某种方式使PHP会话永不过期(这可能吗?) 以下是当前登录脚本: <?php include_once("connection.php"); session_start(); if (!empty($_POST)) { $sth = $dbh->pr

我正在用PHP建立一个网站,但我不确定应该如何处理用户在登录过程中使用的“记住我”选项

我不确定是将用户名和密码保存在JavaScript存储中,并在再次提示用户登录时自动填充它(我怀疑这个选项,因为它会非常不安全),还是以某种方式使PHP会话永不过期(这可能吗?)

以下是当前登录脚本:

<?php

include_once("connection.php");

session_start();

if (!empty($_POST)) {
    $sth = $dbh->prepare("SELECT customer_number FROM customers WHERE username = :username AND password = :password");
    $sth->bindValue(':username', $_POST['username'], PDO::PARAM_STR);
    $sth->bindValue(':password', $_POST['password'], PDO::PARAM_STR);
    $sth->execute();
    $result = $sth->fetchAll();

    if (!empty($result)) {
        $_SESSION['customer_number'] = $result[0]['0'];
        header("Location: /");
    }

    else {
        header("Location: /");
    }      
}

?>

“记住我”选项可通过
$\u POST[“记住”]

访问以下代码:

if (isset($_POST['remember']) and $_POST['remember'] == "Yes") {
        setcookie("username", $_POST['username'], time() + 60 * 60 * 24 * 100, "/");
        setcookie("password", $_POST['password'], time() + 60 * 60 * 24 * 100, "/");
} else {
        setcookie("username", "", time() + 60 * 60 * 24 * 100, "/");
        setcookie("password", "", time() + 60 * 60 * 24 * 100, "/");
}

您将设置一个cookie。 会话是服务器,将在服务器关闭时删除(关闭浏览器)

时间是一分钟,“/”是所有页面。


<?php
if(isSet($cookie_name))
{
    // Check if the cookie exists
if(isSet($_COOKIE[$cookie_name]))
    {
    parse_str($_COOKIE[$cookie_name]);

    // Make a verification

    if(($usr == $_POST['username']) && ($hash == md5($_POST['password'])))
        {
        // Register the session
        $_SESSION['username'] = $_POST['username'];
        }
    }
}
?>
一些有用的答案:


当任何用户在选中
记住我
选项后登录时,使用
令牌ID创建一个
cookie

您可以遵循的步骤:

1) 创建一个随机令牌id,并将其与
用户id
过期时间一起存储在数据库中

2) 当用户登录时,将此
cookie id
tokenid
存储在
cookie

身份验证:

如果找到持久的
cookie
,请检查该cookie的记录是否存在,并检查令牌是否与数据库中的令牌匹配

还要检查过期时间和
UserId

还可以从


此外,关于如何实现此功能,还有一个很好的。您应该设置一个cookie,使其持续时间比关闭浏览器时长。您需要使用cookie…我必须使用cookie吗(是否没有使用会话的方法)?可能有用:另外:将密码存储在cookie中,取消保存?那是一个非常错误的想法!!
<?php
if(isSet($cookie_name))
{
    // Check if the cookie exists
if(isSet($_COOKIE[$cookie_name]))
    {
    parse_str($_COOKIE[$cookie_name]);

    // Make a verification

    if(($usr == $_POST['username']) && ($hash == md5($_POST['password'])))
        {
        // Register the session
        $_SESSION['username'] = $_POST['username'];
        }
    }
}
?>