可能已经解决了我的问题,但我不知道我的问题的确切名称。所以我现在无法搜索它们,我需要在这里发布我的问题。
当我手动登录(意思是用我的手放入用户名和密码)时,我的个人资料页面会正确显示我的数据库中的所有数据。见下图....
现在我正在退出并再次登录。这次我选中了“记住我的方框”。然后我关闭了浏览器而没有注销。所以下次我可以直接访问我的主页,因为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)。那我现在该怎么办?
答案 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 :您的会话不安全您需要保护会话,因为有一些好的阅读
注意2 :使用mysql_*
函数deprecated即使它会在E_DEPRECATED
中生成php5.5警告,因此请使用PDO
或MySQLi
而不是
答案 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";
}
我认为错误是因为会话因为它不会被设置!