【问题标题】:Cookies PHP饼干 PHP
【发布时间】:2010-10-06 01:58:15
【问题描述】:

我将如何“内置”自动登录到此脚本?

if (isset($_POST['login'])) { $查询 = mysql_query(" 选择 * 从用户 WHERE user_name = '".mysql_real_escape_string($_POST['username'])."' AND user_password = '".mysql_real_escape_string($_POST['password'])."' "); /* 错误的登录信息?终止脚本 */ if (!mysql_num_rows($query)){ header("位置:./"); 出口(); } /* 使用唯一索引设置会话 */ $_SESSION['id'] = mysql_result($query, 0, 'user_id'); mysql_query("更新用户 SET user_online = '1' WHERE user_id = '{$_SESSION['id']}'"); header("位置:./"); 出口; }

【问题讨论】:

    标签: php cookies


    【解决方案1】:

    首先,一些建议:

    1. 您应该将密码存储为salted hashes,而不是纯文本。
    2. 您可能希望更改一般的身份验证方式。选择密码(无论如何都不要执行“Select *”)并将其与用户输入的密码的加盐哈希值进行比较可能是个好主意。

    现在,如果我理解正确,您要问的是如何让用户保持登录状态。基本思想是您需要存储一个 cookie,其中包含唯一标识用户的内容(但请确保它不是很容易被劫持 - 所以让它成为一个非常长的字符串,比如 SHA1 哈希或其他东西。)在 cookie 上设置一个遥远的过期日期以保持用户登录。

    Here is the function you use to set cookies in PHP.

    然后,当您加载页面时,您可以检查该 cookie 是否存在。如果 cookie 存在,并且用户没有 SESSION 变量,则可以为他分配一个。

    【讨论】:

      【解决方案2】:

      建议:

      使用password_hashpassword_verify 内置PHP 函数,将密码存储为纯文本是不安全的。

      并检查用户是否已经登录:

      检查$_SESSION['username'] 变量是否已经存在,是吗?:继续索引页面,否?:继续脚本。

      例子:

      if (isset($_SESSION['username'])) {
        header("Location: ./");
        exit();
      }
      

      exit 函数说:停在这里,不要执行脚本的其余部分,所以你不需要 else 语句。

      我希望这会对你有所帮助。

      【讨论】:

        【解决方案3】:
        //use request so you can link to the page and log the user in. it would be a good idead to use md5() on $_REQUEST['username'] and $_REQUEST['password'] so the password and usernames arent in plain text.  see http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_md5
        
        if (isset($_REQUEST['login'])) {
        $query = mysql_query("
                  SELECT * FROM users 
                  WHERE user_name = '".md5($_REQUEST['username'])."' 
              AND user_password = '".md5($_REQUEST['password'])."'
        ");
        /* wrong login information? terminate the script */
        // there should only be one row returned with the query 
        if (mysql_num_rows($query)!=1){
        header("Location: ./");
        exit();
        }
        
        /* set session with unique index */
        $_SESSION['id'] = mysql_result($query, 0, 'user_id');
        mysql_query("UPDATE users SET user_online = '1' WHERE user_id = '{$_SESSION['id']}'");
        header("Location: ./");
        exit;
        }
        
        
        //now you can link to the page
        <a href="login.php?login=yes&username=**insert md5 hash of user name here**&password=md5 hash of password">auto login</a>
        

        【讨论】:

        • 您不想让某人通过 GET 登录。这是一个安全漏洞。
        猜你喜欢
        • 2015-06-06
        • 2010-09-15
        • 2016-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        相关资源
        最近更新 更多