2011-11-24 17 views
-2

自分のサイトでログイン/ログアウトを処理する単一のPHPファイルがあります。ログインはうまくいきますが、ログアウトしようとすると、ファイルがサーバー上に見つかりませんでした。ログイン時にハンドラファイルが動作し、ログアウト時にファイルが見つかりません

このリンクは、ログアウト用のページを呼び出します。

<a href="/logansarchive/admin/do.login?action=out">Sign Out</a> 

ここでは、ファイル内のコードです:

<?php 
    session_start(); 

    if (isset($action) && $action == "out") { 
     // Log out 
     if (ini_get("session.use_cookies")) { 
      $params = session_get_cookie_params(); 

      setcookie(session_name(), '', time() - 42000, 
       $params["path"], $params["domain"], 
       $params["secure"], $params["httponly"] 
      ); 
     } 
     session_destroy(); 
     header("Location: /logansarchive/admin/login.php?logged_out=1"); 
    } 
    else { 
     $username = $_REQUEST["txt_username"]; 
     $password = $_REQUEST["txt_password"]; 
     $action = $_GET["action"]; 

     $host = "127.0.0.1"; 
     $user = "root"; 
     $pass = "12157114"; 

     try { 
      $dbh = new PDO("mysql:host=$host;dbname=logansarchive", $user, $pass); 
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 
     catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 

     // Log in 
     $hashed_pass = hash("sha512", $password); 

     $sql = "select count(*) as count, adminid, adminname, DATE_FORMAT(lastlogin, '%W, %M %e, %Y @ %h:%i %p') AS lastlogin from admin where adminname = :name and adminpass = :pass"; 
     $result = $dbh->prepare($sql); 

     $result->bindParam(":name", $username); 
     $result->bindParam(":pass", $hashed_pass); 

     $stmt = $result->execute(); 
     $row = $result->fetch(); 
     if ($row["count"] == 1) { 
      session_start(); 
      $_SESSION["adminid"] = $row["adminid"]; 
      $_SESSION["adminname"] = $row["adminname"]; 
      $_SESSION["lastlogin"] = $row["lastlogin"];  

      $dbh = null; 
      header("Location: /logansarchive/admin/index.php"); 
     } 
     else { 
      $dbh = null; 
      header("Location: /logansarchive/admin/login.php?login_attempt=1"); 
     } 
    }; 
?> 

どれでも、この動作の説明と(理想的には)それを修正する方法は、大いに感謝します。

答えて

1

do.login有効なPHPファイル名ではありません
代わりにlogin.phpを使用してください。

+0

derp、thanks:D – Ortund

1

現在動作しているのは、サーバーの設定ミス(register_globalsと呼ばれ、検索を行うため)です。 $ actionは3行目に設定しないでください。else文でのみ設定してください。次の行をsession_start()のすぐ下に移動します。

$action = $_GET['action']; 
関連する問題