【问题标题】:how to get the session id如何获取会话 ID
【发布时间】:2011-10-27 18:34:42
【问题描述】:

请帮助我的登录会话有以下 php 代码,但我试图获取 $_session['user_id'] 而不是 $_session['email']。我尝试了 print_f 函数来查看我可以使用什么,但 user_id 数组显示 0 除非我读错了否则这是正确的。

session_start();

$email = strip_tags($_POST['login']);
$pass = strip_tags($_POST['password']);

if ($email&&$password) {
    $connect = mysql_connect("xammp","root"," ") or die (" ");
    mysql_select_db("dbrun") or die ("db not found");
    $query = mysql_query("SELECT email,pass FROM members WHERE login='$email'");
    $numrows = mysql_num_rows($query);
    if ($numrows!=0) {
        // login code password check
        while ($row = mysql_fetch_assoc($query)) {
            $dbemail = $row['login'];
            $dbpass = $row['password'];
        }

        // check to see if they match!
        if ($login==$dbemail&&$password==$dbpass) {
            echo "welcome <a href='member.php'>click to enter</a>";
            $_SESSION['login']=$email;
        } else {
            echo (login_fail.php);
        }
    } else {
        die ("user don't exist!");
    }
    //use if needed ==> echo $numrows;
} else {
    die ("Please enter a valid login");
}

我正在尝试获取 $_session['user_id'],而不是如何使用它而不是 $_session['email']。尝试使用 $_session['user_id'] 但我得到了未定义的错误消息。

【问题讨论】:

  • mysql_query("SELECT email,pass,id FROM members WHERE login='$email'");
  • 在选择查询中输入“id”
  • user_id 应该在哪里?您没有从数据库中获取它,也没有将其分配给会话变量,所以我不确定您为什么希望它在任何地方

标签: php mysql


【解决方案1】:

好吧,你没有在这个脚本的任何地方定义 $_session['user_id'],所以它没有定义也就不足为奇了。您必须先为其分配一个值,然后才能引用它。

另外,请注意这段代码存在各种安全问题。

您正在以 root 用户身份运行 MySQL 连接。这不是一个好主意。

您信任用户输入,这会使您的脚本面临 SQL 注入攻击。从用户输入中去除 HTML 标签并不能保证安全。假设我来到您的网站,并在“电子邮件”字段中填写了以下内容:

bob@example.com'; GRANT ALL PRIVILEGES ON *.* TO 'evil_bob' IDENTIFIED BY '0wned_joo';

按照目前的编写,您的脚本可以正常运行查询,并创建一个名为“evil_bob”的帐户,该帐户对您服务器上所有数据库中的所有信息具有完全权限。

为避免这种情况,切勿假设用户输入是安全的。验证它。并且要更加确定,不要将变量直接粘贴到您编写的 SQL 中。请改用绑定参数。有一些情况是很难避免的——例如,如果您需要指定列的名称而不是一条数据,绑定参数将无济于事,您必须以其他方式进行。但是,对于您在查询中使用的任何数据,请将其绑定。

【讨论】:

  • 它不会运行第二个查询,见mysql_query()
  • 这是一个教科书案例。阅读 sql 注入:unixwiz.net/techtips/sql-injection.html
  • 我知道什么是 SQL 注入。 PHP mysql 扩展只会在mysql_query() 中运行一个查询。第一个分号之后的任何内容都会出错或被忽略(我忘记了)。请注意,我绝不建议实施适当的预防措施。你仍然得到了我的 +1
  • 我的立场是正确的。那很有意思。我必须更新我的答案以反映这一点,但现在已经快凌晨 2 点了,我还有几个小时的工作,所以它必须等待。不过,谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 2022-10-02
  • 2012-02-02
  • 2023-03-31
  • 2019-02-17
  • 2013-09-09
  • 2012-09-04
相关资源
最近更新 更多