2016-10-05 9 views
1

私のログインページでは、私は電話番号とパスワードフィールドを使ってログインしています。その後、私は電話番号を使ってセッションを作成して保存しています。セッションの作成中に2つのフィールドを取得する方法は?

Instedは、私が現在ログインしているユーザーの電話番号を表示することしかできています現在、私の場合、現在のユーザーbecasueを表示するには、ログインユーザー名をエコーし​​ます。それ、どうやったら出来るの?ここで

は私のログインスクリプト

<?php 
    // Starting Session 
    session_start(); 

    include "../script.php"; 

    $error=''; // Variable To Store Error Message 

    if (isset($_POST['signin'])) { 
    if (empty($_POST['signinphone']) || empty($_POST['signpassword'])) { 



     $error = "Phone or Password is invalid"; 
    } 
    else 
    { 
    // Define $username and $password 
    $phone=$_POST['signinphone']; 
    $password=$_POST['signpassword']; 


    // To protect MySQL injection for Security purpose 


     $phone = stripslashes($phone); 
     $password = stripslashes($password); 
     $phone = pg_escape_string($db, $phone); // Set email variable 
     $password = pg_escape_string($db, $password); // Set hash variable 

     $pass_crypted = password_hash($password); 

    // SQL query to fetch information of registerd users and finds user match. 

     $sql="SELECT usr_id, usr_email, usr_first_name, usr_last_name, 
       usr_encrypted_password, 
         usr_salt, usr_stos_id, usr_pers_id, usr_username, usr_updated_at, 
         usr_created_at, usr_enabled, usr_role_id, usr_jbrn_id, 
       usr_mobile_number, 
         stp_acc_id, usr_location, usr_mobile_imei, usr_type 
       FROM js_core.stp_users 

       where usr_mobile_number='$phone' 

       AND usr_encrypted_password='$password'"; 
     $result=pg_query($db, $sql); 

     $rows = pg_num_rows($result); 

     if ($rows == 1) { 
       $_SESSION['phone']=$phone; // Initializing Session 
       $_SESSION['username'] = pg_fetch_object($result)->usr_last_name; 
       header("location: ../index.php"); 

       } else { 
      //echo "0 results"; 

       echo "Try Again the credentials you entered don't much ours"; 

      } 

     ; // Closing Connection 

     } 
     } 


    ?> 

。ここでは、私はあなたの質問への1つの答えはありません携帯電話のユーザー名のインプレース

<li> 
     <?php 

        if(isset($_SESSION['username'])) { 

         echo '<li><a href="#">'. $_SESSION["username"] . '</a></li>'; 
         echo '<li> 
          <a href="config/logout.php" id="logout">Log Out</a></li>'; 
        } else { 
        echo '<a class="signing" href="#login" data-toggle="modal" data-target="#signIn">Login </a>'; 
        } 
     ?> 
</li> 
+0

ポスト配列にセッション配列を割り当てます。加えて、あなたはこれで生きていくつもりはありません。 MD5はもう安全ではありません。 –

+0

@ Fred-ii-どのようにすればいいですか? – john

+0

あなたはすべてのユーザー情報をクエリから取得していますので、セッションに必要なビットを保存してください。たとえば、 '$ _SESSION ['username'] = pg_fetch_object($ result) - > usr_username;' – Steve

答えて

0

を表示したい私のサンプルコードです。

それはあなたの質問にコメントで言及されているすべてのものの例が含まれているので、私はこれを掲示しています。

まず、あなたはPDOを使用する新しい$db接続があることに気づくでしょう。これはDB接続を処理する一般的に受け入れられた方法であり、インストールするのが比較的簡単です(あなたのPHPバージョンがそれを持っていない場合) - SOにはたくさんの例があります。私はそれがあなたのscript.phpの中でこれを望むと思うでしょう。

私はまた、ネイティブBCRYPTpassword_hash()機能のパスワードハッシュ関数をスワップアウトしました。

$encryped_password = password_hash($_POST['signpassword'], PASSWORD_BCRYPT); 

これには、デフォルトのコストで一意にソルトされたパスワードが含まれています。

あなたがいたとして、あなたがそれプリペアドステートメント作るために少し調整して、ユーザーを取得することができることを以下に示します。これはSQLインジェクション保護を提供し、一般的に物事をよりクリーンにします。

あなたはその行がフェッチされた後、あなたはpassword_verify()機能でパスワードを比較できることがわかります。元の問題への最後

- 私は反対するPDOモードを設定しているので、あなたが同じようにする必要があるとして、あなたはできるだけ多くのプロパティにアクセスして割り当てることができます。そのオブジェクトでは、SELECT句のプロパティのみが使用可能になります。

// Starting Session 
session_start(); //I'd suggest this should also go in your script.php 

$db = new PDO('pgsql:dbname=mydb;host=localhost;user=myuser;password=mypass'); 

include "../script.php"; 

$error=''; // Variable To Store Error Message 

if (isset($_POST['signin'])) { 
    if (empty($_POST['signinphone']) || empty($_POST['signpassword'])) { 
     $error = "Phone or Password is invalid"; 
    } 
    else 
    { 
     // SQL query to fetch information of registerd users and finds user match. 
     $sql = 'SELECT usr_id, usr_email, usr_first_name, usr_last_name, usr_encrypted_password 
          usr_stos_id, usr_pers_id, usr_username, usr_updated_at, 
          usr_created_at, usr_enabled, usr_role_id, usr_jbrn_id, 
          usr_mobile_number, stp_acc_id, usr_location, usr_mobile_imei, 
          usr_type 
        FROM js_core.stp_users 
        WHERE usr_mobile_number = :phone_number'; 

     $stmt = $db->prepare($sql); 
     $stmt->execute(['phone_number' => $_POST['signinphone']]); 

     if ($row = $stmt->fetch(PDO::FETCH_OBJ)){ 
      if(password_verify($_POST['signinpassword'], $row->usr_encrypted_password)) { 
       $_SESSION['phone'] = $row->usr_mobile_number; // Initializing Session 
       $_SESSION['username'] = $row->usr_username; 

       header("location: ../index.php"); 
      } else { 
       //valid user, invalid password 
      } 
     } else { 
      //Invalid user 
      echo "Try Again the credentials you entered don't much ours"; 
     } 
    } 
} 

私はあなたがpassword_hashのリースPHP 5.5で実行しているという仮定をしたが、polyfillでない場合がありました。

関連する問題