即使在系统关闭后,这仍然可以保持在我的站点中

时间:2012-12-21 09:40:59

标签: php cookies

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

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

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

我搜索自己存储了一个记住我在我的系统中存储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 个答案:

答案 0 :(得分:3)

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

有几件事:

  1. 您的系统关闭时间超过一小时。您的Cookie设置为在一小时setcookie("username", $email, time() + 3600);后过期。如果你想让它“持久”,你当然可以将它延长几周(或更长)。
  2. 您正在使用Internet Explorer并关闭而不“干净地”关闭浏览器。在“粗略”关机后,Internet Explorer有忘记忘记的事情。
  3. 但是您的代码存在安全问题,因为只存储自动登录的用户名有点不安全。任何人都可以创建一个带有管理电子邮件地址的“用户名”cookie,并以其身份登录。有时处理remember_me的方法是生成一个“自动登记令牌”,它将是一个随机散列,在数据库中为该用户分配,然后存储在cookie中。这个哈希可以每隔几天就没有用,或者能够阻止严重的旧登录发生或劫持。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

Cookie expiriation
Cookie只会存储一小时,请参阅time() + 3600。 3600表示秒,您的cookie有效期多长。也许这就是问题所在。您可以将此时间段花费在特定日期或数周,这很常见。

浏览器设置
此外,您的浏览器可能有一个奇怪的cookie设置,因此它会在关闭时删除所有cookie。也许请与其他浏览器联系。

答案 3 :(得分:1)

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

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