如何获取会话ID

时间:2011-08-16 04:52:40

标签: php mysql

请帮助我为我的登录会话提供以下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'],但我得到了未定义的错误信息。

1 个答案:

答案 0 :(得分:1)

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

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

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

您信任用户输入,这会使您的脚本打开SQL注入攻击。从用户输入中删除HTML标记不会使其安全。假设我来到您的网站,并填写“email”字段:

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

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

为避免这种情况,请勿假设用户输入是安全的。验证它。更确切地说,不要将变量直接插入到您编写的SQL中。请改用绑定参数。在某些情况下,很难避免 - 例如,如果您需要指定列的名称而不是一段数据,绑定参数将无济于事,您将不得不以其他方式执行此操作。但是,对于您在查询中使用的任何数据,请将其绑定。