1

ログインシステムの構築方法を学んでいます。これは最も安全であるという意味ではありませんが、セッションを使用することで簡単にハッキングされることなく機能するはずです。

ログインに成功すると、インデックスページにリダイレクトされ、ナビゲーションの一部のエントリが変更されます(たとえば、ログインはログアウトである必要があります)。

私のナビゲーション:

<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()を含める必要がありますか、それともログインしているかどうかを確認する別の方法がありますか?

4

2 に答える 2

3

あなたがsession_start()最初に含まれていなければ、私の答えはイエスになります。グローバル変数session_start()にアクセスするすべてのページの最初で使用する必要があります。$_SESSION

より良い選択は、他のファイルを作成してそのファイルに入れsession_start、セッションを機能させたい場所にこのファイルを含めることです。

于 2012-12-10T13:32:28.437 に答える
1

session_start()$_SESSION変数が使用される各ページの上部にある必要があります。また、mysql拡張機能の使用はお勧めしません。間もなく廃止される予定です。PDOの使用を検討します。

于 2012-12-10T13:33:57.523 に答える