2017-09-08 18 views
-2

私はこのウェブサイトで1年以上遊んでいて、まだセッション管理についてほとんど理解していません。ウェブサイトのログイン/セッション管理

私はログインスクリプトをどこかに持っていましたが、私には隠されていましたが、問題はありません。

しかし、明らかに何らかの種類のログインのセッションマネージャが無用です。

私はちょっと考えていましたが、私はセキュリティを設定する方法についてはかなりのフローチャートを描きました。

しかし、mysqliは私を遅くしています。

私はクッキーにユーザー名を格納するというアイデアがありました。この値をデータベースと比較して最後に使用したセッションIDを見つけ、phpsesidクッキーと比較して最後にIDを新しいものに更新して置き換えますdb、これは時代遅れのセッショントークンを持っている人なら誰でもログインする必要があることを意味します。

私はデシベルで定義済みのユーザ名を選択するために、$のSQLを置換しているデバッグ用のMySQL

if(isset($_COOKIE[$cookie_name])){ 
     require_once ("bin/sql.php"); 
     //plan to put another if statement here when the sql works 
     $sql = "SELECT '$_COOKIE[$cookie_name]' FROM DB.TBL;"; 
     echo $sql . "<br>"; //debugging 
     $uiddb = new sqlflow; 
     $uiddb-> db_query($sql); 

からデータを引っ張って問題を有する新規セッションマネージャイムを構築しながらので、最終的には「一般的な場合があるでしょうユーザー、他の 'を実行します。

sql docは混乱していますが、私はgoogleを検索した後にいくつかのバリエーションを試しましたが、一般的な結果は '文字列に変換できません'、未知のインデックスであり、配列isntとして機能します。

mysqli_fetch 
mysqli_store 
misqli_use 

すべてのリターンは とi「がperamはmysqliのことが期待」結果VAR を使用するときに私もVARの内容を撮影しperamとしてそれを使用し、thatsのときに私いる「1 peramが0見つかっ期待」を定義されていないインデックスを取得するように思われる

function db_query($value){ 
    $connect = self::db_connect(); 
    $result = mysqli_query($connect,$value); 

私はこの後に何かを得ることができませんでした。

私がやろうとしているのは、ユーザーのPID + SESIDなどのデータベースから情報をプルすることです。他の2つのテーブルに最後の既知のIPなどの情報を問い合わせることができます。

+0

'$ sqlを[$:すべての文書の先頭に)(関数のsession_startを入れ

session_start(); $cookie_name = $_COOKIE[$cookie_name]; if(!empty($cookie_name)) { $resultcookie = query("SELECT iduser FROM tbluser WHERE username='$cookie_name';"); if($resultcookie->num_rows != 0) { $fetchedcookie = $resultcookie->fetch_assoc(); /* Create a new session with the username in it */ $_SESSION['user'] = $fetchedcookie; } else { echo 'Cookie not found'; ////// More Code ///// } } 

セッション:しかし、それはクッキーでPRIVAT情報を格納する脆弱性だ覚えていますcookie_name] 'FROM DB.TBL; ";'このコードは危険です**。 SQLインジェクションの脆弱性を調べ、PHPで準備されたステートメントを作成する方法。 – ceejayoz

+0

これはアルファです。私はそれを動作させるために働いています。ilは、コードインジェクションに対して後でreal_escapeをインストールするために、私はすでにクエリを実行する前に入力をエスケープするように指定された関数を持っています。私はXAMPPで作業していますので、セキュリティについて心配する必要はありません。 –

+0

のアクセス権を持つ唯一の人です。危険な**の練習です。初めてのことですので、修正するのを忘れないようにしてください。そうすれば、セキュリティを奪い尽くすように訓練することはありません。 – ceejayoz

答えて

0

あなたの問題は本当にわかりません。 PHPでのMySQLの接続を使用する方法しかし、ここでいくつかの例:あなたが1つのファイルを使用することができ、あなたのDB接続については

データベース

今、どこでも、あなたはこのファイルを含めることができ、データベースへの接続を必要とする
/* db-connect.php */ 
<?php 

# Neue Verbindung: Diese Variable kann global aufgerufen werden 
$verbindung = new mysqli('db-server-adress', 'database-user', 'userpassword', 'database'); 

if($verbindung->connect_error) 
{ 
    printf("Connect failed: %s\n", $verbindung->connect_error); 
} 

# Über diese Funktion können vereinfacht MySQL-Befehle abgesetzt werden 
function query($sql) 
{ 
    global $verbindung; 

    if($result = $verbindung->query($sql)) 
    { 
     return $result; 
    } 
    else 
    { 
     $verbindung->error; 
    } 
} 
?> 

:あなたがあなたはmysql-に送信するすべてのクエリで「クエリ」THS関数を呼び出すことができますこれにより

/* Include the Database-Connection */ 
include 'db-connect.php'; 

をDB:

/* with the function query() you can call any sql-statement and box the result to a variable */ 
$queryresult = query("SELECT iduser FROM tbluser WHERE username='testuser';"); 

/* num_rows is the numbers of rows that were found by your query: */ 
if($queryresult->num_rows != 0) 
{ 
    /* Fetch each found row of the query */ 
    while($fetchedQuery = $queryresult->fetch_assoc()) 
    { 
      /* Call a single attribute from the current fetched row */ 
      echo $fetchedQuery['iduser']; 
    } 
} 
else 
{ 
    echo 'no result'; 
} 

クッキー 私が最初にあなたのCookieNameの結果をボックスにあなたにお勧めします。 =「「$ _COOKIEを選択

<?php 
session_start(); 

/* Check if the Session user exists with this client */ 
if(isset($_SESSION['user'])) 
{ 
     echo 'Session is set'; 
} 
else 
{ 
     echo 'session is not set'; 
} 

/////////// Destroy a Session /////////// 
session_destroy(); 
+0

あなたは知っている、私は私が送信していたクエリで間違っていたと思ったが、私はそれを脳にすることはできませんでした。偉大な答えは、私はちょうど私はそれ以上の質問 –

+0

@ L.Hを持っていないそれを受け入れると私は他のものに行こうとしましょう。いくつかのセッション管理を追加しました。残りはあなた自身で学ばなければならない。 – Oliver

+0

あなたの関数にはエラー処理がありません。常にエラーが発生する可能性があります。 – Oliver

関連する問題