1

我对记住我的功能有疑问。

系统关闭后用户打开网站时是否可以保持登录状态。

例如,现在我在登录后在我的网站上工作,突然系统关闭了。再次打开我的系统,系统是否使用我的用户名保持登录状态。

我搜索自己以存储记住我的功能,以便在我的系统中存储 cookie。但我没有得到任何明确的解决方案。任何人都知道如何为此功能编写代码。你能帮我解决这个记住我的功能问题吗

<?php 
include("classes.php");
$jeob = new EF_Sql();

    $email= $_POST['userid'];

    $password= $_POST['password1'];

    $papas=base64_encode($password);

    $check = $_POST['rememberme'];

        $tablename="user_record";

    $select_qry = $jeob->SqlQuery("SELECT * FROM ".$jeob->dbprefix.$tablename." WHERE email ='$email' AND password ='$papas' AND active_link='1' ");

        if($jeob->SqlRows($select_qry) == "0"){                 

         echo "Invalid Username and Password";

        } else {

        if($check) {

setcookie("username", $email, time() + 3600);       // Sets the cookie username

        }

        $getuser = $jeob->SqlFetch($select_qry);

        $_SESSION['userid'] = $getuser['user_id'];  

        $_SESSION['oauth_provider'] = "normal";

        $_SESSION['email'] = $getuser['email'];     

        }
?>

上面的编码用于我的网站。但即使在浏览器关闭并再次打开该站点后,它仍保持登录状态。但是在系统关闭后它会被销毁

4

4 回答 4

3

Cookies 不关心您的系统是否关闭。

有几件事:

  1. 您的系统关闭时间超过一个小时。您的 cookie 设置为一小时后过期setcookie("username", $email, time() + 3600);。如果您希望它“持久”,您当然可以将其延长至数周(或更长)。
  2. 您正在使用 Internet Explorer 并在没有“干净”关闭浏览器的情况下关闭。Internet Explorer 在“粗略”关闭后倾向于忘记事情。

但是,您的代码存在一个安全问题,即仅存储自动登录的用户名有点不安全。任何人都可以简单地创建一个包含管理电子邮件地址的“用户名”cookie,并以他们的身份登录。有时处理 remember_me 的方式是生成一个“自动登录令牌”,这将是一个随机散列,分配给数据库中的该用户,然后存储在 cookie 中。这个哈希可以每隔几天失效一次,以便能够阻止严重旧登录的发生或劫持。

于 2012-12-21T09:45:53.680 回答
2

好吧,我通常会看到人们设置了加密的身份验证 cookie。如果该 cookie 在 10 天内仍然有效,您可以使用它来验证用户身份,即使会话已过期。

于 2012-12-21T09:46:05.607 回答
1

session / cookie
确保,您实际上正在使用 cookie。您的代码段显示了一些$_SESSION内容,但没有提示使用了存储的 cookie。

cookie 过期
cookie 仅存储一小时,请参阅time() + 3600。3600 代表秒数,即您的 cookie 的有效期。也许这就是问题所在。您可以将此时间段延长到某些天或几周,这很常见。

浏览器设置
此外,您的浏览器可能有一个奇怪的 cookie 设置,因此它会在关闭时删除所有 cookie。也许用另一个浏览器检查。

于 2012-12-21T09:43:13.557 回答
1

Cookie 是保存在浏览器中的用户会话的最佳解决方案。每次用户发送 HTTP 请求时,cookie 都会随请求一起发送。您的应用程序可以通过读取 cookie 中的信息来识别用户。

您可以根据需要选择 cookie 的年龄。

于 2012-12-21T09:47:56.667 回答