Session,Cookies,记住我工作正常但是

时间:2012-12-15 13:30:13

标签: php session cookies

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

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

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

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

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)。那我现在该怎么办?

2 个答案:

答案 0 :(得分: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 Security Guide: Sessions
  2. Sessions and security
  3. PHP Session Security
  4. How safe are PHP session variables?
  5. 注意2 :使用mysql_*函数deprecated即使它会在E_DEPRECATED中生成php5.5警告,因此请使用PDOMySQLi而不是

答案 1 :(得分:-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";
}

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