0

可能已经有我的问题的解决方案,但我不知道我的问题的确切名称。所以我现在无法搜索它们,我需要在这里发布我的问题。

当我手动登录时(意思是用手输入用户名和密码),我的个人资料页面会正确显示数据库中的所有数据。见下图...... 正确的图像

现在我退出并再次登录。这次我选中了“记住我”框。然后我没有注销就关闭了浏览器。因此,下次当 cookie 起作用时,我可以直接访问我的主页。到目前为止一切都很好。但是当我检查我的个人资料页面时,灾难就来了。见下图.... :( 图像不正确

我已经使用“用户名”列来检测我的数据库的表行。因为我的代码不允许来自其他用户的相同用户名。这是个人资料页面的代码:

session_start();
$name = $_SESSION['username'];
$result = mysql_query("SELECT * FROM store WHERE Username='$name'");
while ($row = mysql_fetch_array($result)) {
    $first = $row['Firstname'];
    $last = $row['Lastname'];
    $use = $row['Username'];
    $pas = $row['Password'];
}

然后我只是在个人资料页面中回显它们(这四个变量 $first、$last、$use 和 $pas)。那我现在该怎么办?

4

2 回答 2

1

首先确保会话已设置并且不为空,因为您可以使用empty()它将显式检查isset()

session_start();
if (!empty($_SESSION['username'])) {
    $name = $_SESSION['username'];
    $result = mysql_query("SELECT * FROM store WHERE Username='$name'");
    while ($row = mysql_fetch_array($result)) {
        $first = $row['Firstname'];
        $last = $row['Lastname'];
        $use = $row['Username'];
        $pas = $row['Password'];
    }
}

注意1:您的会话不安全,您需要保护会话,因为有一些很好的阅读

  1. PHP 安全指南:会话
  2. 会话和安全
  3. PHP 会话安全
  4. PHP 会话变量的安全性如何?

注意 2不推荐mysql_*使用函数,即使它会在php5.5中生成警告,所以使用or代替E_DEPRECATEDPDOMySQLi

于 2012-12-15T13:52:02.780 回答
-2
session_start();
$name = $_SESSION['username']; // here is the problem
$result = mysql_query("SELECT * FROM store WHERE Username='$name'");
while ($row = mysql_fetch_array($result)) {
    $first = $row['Firstname'];
    $last = $row['Lastname'];
    $use = $row['Username'];
    $pas = $row['Password'];
}

您可以通过检查此语句是否设置会话来查看

if (isset($_SESSION['username'])) {
    echo "Session is Set";
} else {
    echo "Session is not Set";
}

我认为错误是由于会话,因为它不会被设置!

于 2012-12-15T13:42:10.423 回答