2017-08-30 12 views
0

セッションに問題があります。ログインに2種類のユーザーが必要なアプリケーションに機能があります.1人は管理者です。アプリケーション内で、他はエディタであり、彼はその中でいくつかのことしかできません。セッションが機能していない、重複しています

私の問題は、セッションが互いに重なっているように見えることです。私は管理者でログインし、セッション情報はエディタからのものです。

相続人は管理者からの私のログイン:

<!---Login PHP---> 
<?php 
    if(isset($_POST['btn-login'])) { 

    $email = $_POST['email']; 
    $senha = $_POST['senha']; 

    $Error = false; 

    if (empty($email)) { 
     $Error= true; 
     $error = "Preencha o email."; 
    } 

    if (empty($senha)) { 
     $Error = true; 
     $error2 = "Preencha a senha."; 
    } 
    if($email) {   
      $sql = "SELECT email FROM admin WHERE email = '$email'"; 
      $stmt = $conn->prepare($sql); 
      $stmt->execute(); 
      $cout = $stmt->rowCount(); 
      //echo "Email - ".$cout; 
     } 
     if($senha) { 
      $sql = "SELECT senha FROM admin WHERE email = '$email'"; 
      $stmt = $conn->prepare($sql); 
      $stmt->execute(); 
      $cout = $stmt->rowCount(); 
      if($cout == 1) { 
      //echo "<br>Password - ".$cout; 
       $hashed = $stmt->fetch(PDO::FETCH_ASSOC); 
       //echo "<br>Password HASHED - ".$hashed['senha']; 
       $hashed_pass = $hashed['senha']; 
      } 
     } 



    if (!empty($email) && !empty($senha) && filter_var($email,FILTER_VALIDATE_EMAIL) && password_verify($senha,$hashed_pass) && !$Error) { 

     $sql = "SELECT email, senha FROM admin WHERE email ='$email' AND senha = '$hashed_pass'"; 
     $query = $conn->prepare($sql); 
     $query->execute(); 
     $count = $query->rowCount(); 

      if($count == 1){      
       session_start(); 
        $_SESSION['email'] = $email; 
        $_SESSION['senha'] = $crypt; 
        header("Location: home.php"); 
        exit; 
      } 

      else { 

       $error = "Erro: password ou email errados"; 

      } 

    } 
    } 

    ?> 

HERESに私のエディタログイン:

<?php 
    ob_start(); 
    session_start(); 
    // if session is not set this will redirect to login page 
    if(!isset($_SESSION['email']) && !isset($_SESSION['senha'])) { 
     header("Location: admin.php"); 
     exit; 
    } 
    // ADMIN SESSIONS 
    if(isset($_SESSION['email'])){ 
    //echo "entrei"; 
     // select loggedin users detail 
     $res = "SELECT * FROM admin WHERE email='".$_SESSION['email']."'"; 
     $stmt = $conn->prepare($res); 
     //echo "<br>SQL - > ".$res; 
     $stmt ->execute(); 
     $count = $stmt ->rowCount(); 
     if ($count == 1) { 
      $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 
     }  
    } 
    //EDITOR SESSIONS 
    if(isset($_SESSION['email_e'])) { 
    //echo "<br>Entrei2"; 
     $sql = "SELECT * FROM editor WHERE email = '".$_SESSION['email_e']."'"; 
     //echo "<br>SQL - > ".$sql; 
     $stmt = $conn->prepare($sql); 
     $stmt->execute(); 
     $count = $stmt->rowCount(); 
     if($count == 1) { 
      $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 
     } 
     //echo "<br>Contagem - ".$count; 
    } else { 
    echo "<br>Sem Sucesso"; 
    } 

?> 

と私がしようとしていた。

<?php 
/*EDITOR*/ 
    if(isset($_POST['btn-login2'])) { 

    $email = $_POST['email']; 
    $senha = $_POST['senha']; 

    if (empty($email)) { 
     echo "Preencha o email"; 
    } 

    if (empty($senha)) { 
     echo "Preencha a senha"; 
    } 
    if($email) {   
      $sql = "SELECT email FROM editor WHERE email = '$email'"; 
      $stmt = $conn->prepare($sql); 
      $stmt->execute(); 
      $cout = $stmt->rowCount(); 
      //echo "Email - ".$cout; 
     } 
     if($senha) { 
      $sql = "SELECT senha FROM editor WHERE email = '$email'"; 
      $stmt = $conn->prepare($sql); 
      $stmt->execute(); 
      $cout = $stmt->rowCount(); 
      if($cout == 1) { 
      //echo "<br>Password - ".$cout; 
       $hashed = $stmt->fetch(PDO::FETCH_ASSOC); 
       //echo "<br>Password HASHED - ".$hashed['senha']; 
       $hashed_pass = $hashed['senha']; 
      } 
     } 


    if (!empty($email) && !empty($senha) && filter_var($email,FILTER_VALIDATE_EMAIL) && password_verify($senha,$hashed_pass)) { 

     $sql = "SELECT email, senha FROM editor WHERE email ='$email' AND senha = '$hashed_pass'"; 
     $query = $conn->prepare($sql); 
     $query->execute(); 
     $count = $query->rowCount(); 

      if($count == 1){ 
       session_start(); 

        // criar sessão com o email recebido por post e mandar o utilizador para a página home 
        $_SESSION['email_e'] = $email; 
        $_SESSION['senha_e'] = $senha; 
        header("Location: home.php"); 
        exit; 
      } 

      else { 

       echo "Erro: password ou email errados"; 

      } 

    } 
    } 
    ?> 

そして、ここでは、セッションファイルであります私はセッションを破壊しなかったかもしれないが、それでもまだ問題は解決していないかもしれないが、この問題を解決する私は信じています。

ログアウトファイル:anwsers誰にも事前に

<?php 
    session_start(); 
    ob_start(); 

    if (!isset($_SESSION['email']) || !isset($_SESSION['email_e'])) { 
     header("Location: index.php"); 
     exit(); 
    } else if(isset($_SESSION['email'])!="") { 
     header("Location: index.php"); 
     exit(); 
    } 
    //ADMIN LOGOUT 
    if (isset($_GET['logout'])) { 
     unset($_SESSION['email']); 
     unset($_SESSION['email_e']); 
     session_unset(); 
     session_destroy(); 
     header("Location: error.php"); 
     exit; 
    } 
    ob_end_flush(); 
?> 

感謝。

+0

あなたは1つのアカウントにログインしていますか? – Adam

+1

同じブラウザを使用して2つのアカウントにログインしている場合、この混乱を招くことになります。 2つの異なるブラウザを使用してください。 – Stuart

+0

はい、私はエディタにログインしてログアウトし、管理者にログインします –

答えて

1

2つの異なるセッション変数を作成して2種類のユーザーを処理しているのは私にとっては奇妙なことです。私が何が起こっていると考えているかは、どうにかして変数の1つが設定されず、その結果あなたの問題が発生するということです。

同じ変数($ _SESSION ['email'])を使用し、ユーザーの種類に基づいて任意のコンテンツを表示する方がずっとシンプルでエレガントです。

新しいユーザータイプを追加する必要があると考えてください。ログインとログアウトを処理するすべてのコードを編集する必要がありますが、これは正常ではありません。

管理者と編集者の両方に対して1つのログインページを作成し、電子メールに基づいてデータベースからそのユーザータイプを取得してください。

+0

彼は別のログインページを使用していません。ログインを扱うロジックは、両方のタイプのユーザーに対して 'login.php'で実行されます。 – BugHunterUK

+0

ええ、私の悪い、私は同じボタン/コードを言うことを意味しました。 –

+0

実際、私は間違っている。謝罪バディ。彼は確かに2つの異なるログインプロセスを持っています。そうです、それは悪い考えです。 – BugHunterUK

関連する問題