我正在学习如何构建登录系统。它并不意味着最安全,但它应该可以通过使用会话而不会太容易被黑客攻击。
成功登录后,您应该被重定向到索引页面,导航中的某些条目应该更改(例如,登录应该是注销)。
我的导航:
<nav>
<?php
if(!isset($_SESSION["username"])) {echo "<a class='left"; if($section == "login") {echo " active";} echo"' href='index.php?p=login'>Login</a>";}
else {echo "<a class='left"; if($section == "logout") {echo " active";} echo"' href='index.php?p=logout'>Logout</a>";}
?>
</nav>
我的登录表单:
<form action="index.php?p=login_check" method="post">
Username: <input type="text" size="24" maxlength="50" name="username"><br />
Passwort: <input type="password" size="24" maxlength="50" name="password"><br />
<input type="submit" value="Abschicken">
</form>
我的登录验证:
<?php
$verbindung = mysql_connect("localhost", "root" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("website") or die ("Datenbank konnte nicht ausgewählt werden");
$username = $_POST["username"];
$password = $_POST["password"];
$abfrage = "SELECT username, password FROM logins WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
if(@$row->password == $password)
{
session_start();
$_SESSION["username"] = $username;
echo "<p>Login erfolgreich.</p>";
}
else
{
echo "<p>Benutzername oder Passwort waren falsch. <a href=\"index.php?p=login\">Login</a></p>";
}
?>
我的退出:
<?php
session_destroy();
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);
?>
现在当我回到起始页面时,我仍然看到“登录”而不是“退出”。我是否必须在我的索引页面上包含session_start(),或者是否有其他方法来检查我是否已登录?
答案 0 :(得分:3)
如果您在开头没有包含session_start()
,那么我的回答是肯定的。
您应该在访问session_start()
全局变量的每个页面的开头使用$_SESSION
。
更好的选择是,创建一个其他文件并将session_start
放入其中,并将此文件包含在您希望会话工作的任何位置。
答案 1 :(得分:1)
session_start()
应位于每个页面的顶部,使用$_SESSION
变量。此外,不建议使用mysql
扩展名。它很快就会被弃用。我会考虑使用PDO。