2017-05-08 14 views
1

JS、JQuery、PHPを使用する単純なログインページを作成しています。PHPでセッションを使用中にエラーが発生しました

login.php

<!DOCTYPE html> 
<head> 
    <title>Login activity to learn AJAX</title> 
    <link rel="stylesheet" type="text/css" href="login.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script type="text/javascript" src="login.js"></script> 
</head> 
<body> 
    <h1>AJAX learning</h1> 
    <h2>Login below to continue</h2> 
    <div class="row"> 
     <p>User ID:</p> 
    </div> 
    <div class="row"> 
     <p><input type="text" name="uid" id="usr"></p> 
    </div> 
    <div class="row"> 
     <p>Password:</p> 
    </div> 
    <div class="row"> 
     <p><input type="password" name="pwd"></p> 
    </div> 
    <div class="row"> 
     <p><input type="button" onclick="checkLogin()" value="Login"></p> 
    </div> 
    <div class="row"> 
     <p id="status"></p> 
    </div> 
</body> 

login.js

function ajaxRequest(){ 
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE 
if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) 
    for (var i=0; i<activexmodes.length; i++){ 
    try{ 
    return new ActiveXObject(activexmodes[i]) 
    } 
    catch(e){ 
    } 
    } 
} 
else if (window.XMLHttpRequest) // if Mozilla, Safari etc 
    return new XMLHttpRequest() 
else 
    return false 
} 
function checkLogin(){ 
    var xhttp=new ajaxRequest(); 
    var uid=$('input[name=uid]').val(); 
    var pwd=$('input[name=pwd]').val(); 
    xhttp.open("POST","do_login.php",true); 
    xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    var param = "UID="+uid+"&PASS="+pwd; 
    xhttp.send(param); 
    xhttp.onreadystatechange=function(){ 
     if(xhttp.readyState == 4){ 
      if(xhttp.status==200){ 
       generateResponse(xhttp.responseText,uid); 
      } 
      else{ 
       window.alert("Error while making request"); 
      } 
     } 
    } 
} 
function generateResponse(data,uid){ 
    if(data==="Error 1"){ 
     $("#status").text("USER NOT FOUND!"); 
     $("input[name=uid]").val(""); 
     $("input[name=pwd]").val(""); 
    } 
    else if(data==="Error 2"){ 
     $("#status").text("INCORRECT PASSWORD!"); 
     $("input[name=pwd]").val(""); 
    } 
    else{ 
     window.location='page2.php'; 
    } 
} 

do_login.php

<?php 
    session_start(); 
    $uid=$_POST['UID']; 
    $pass=$_POST['PASS']; 

    $connection = mysqli_connect("localhost","shreyansh","","ajax"); 
    $query1 = "SELECT user FROM login WHERE user = '$uid' AND pass = '$pass' "; 
    $query2 = "SELECT user FROM login WHERE user = '$uid'"; 
    $result = mysqli_fetch_array(mysqli_query($connection,$query1)); 
    // checking credentials 
    $response = ""; 
    if(count($result)==0){ 
     $res = mysqli_fetch_array(mysqli_query($connection,$query2)); 
     if(count($res)==0){ 
      $response = "Error 1"; 
     } 
     else 
      $response = "Error 2"; 
    } 
    else{ 
     $_SESSION['username']=$uid; 
    } 
    echo $response; 
?> 

page2.php

<?php 
    session_start(); 
    if(!isset($_SESSION['username']) || empty($_SESSION['username'])) 
    header("Location: login.php"); 
?> 
<!DOCTYPE html> 
<head> 
    <title>Welcome Page</title> 
    <script type="text/javascript" src="login.js"></script> 
</head> 
<body> 
    <p>Hello <?php echo $_SESSION['username']?> </p> 
</body> 

主な目的は、login.phpページにエラーメッセージを表示し、資格情報が正しい場合はpage2.phpにリダイレクトすることです。
ログインボタンを押すと、ページはpage2.phpにリダイレクトされますが、何も表示されません。 Webページ全体が空白です。私のコードでエラーを特定してください。

+2

あなたのために'do_login.php'ページの上に' session_start(); 'を追加しました。 'else'部分から削除して上に追加して、 –

+0

をチェックしてみてください。まだ動作しません。 – user3422177

+0

追加session_start();ページの上部にあるdo_login.phpにあり、page2.phpから削除する –

答えて

2

あなたは、コードのタイプミスを持っている:

<?php 
    session_start(); 
    if(!isset($_SESSION(['username'])) || empty($_SESSION['username'])) 
    header("Location: login.php"); 
?> 

$_SESSIONはとても()でそれを使用すると、エラーを返す関数ではありません。また、ヘッダーだけではページが実行されないので、コードは実行されません。また、あなたのSQLでMySQLの注入を持っているあなたは、ロケーションヘッダを設定した後

をコードの実行を防ぐために
<?php 
    session_start(); 
    if(!isset($_SESSION['username']) || empty($_SESSION['username'])) { 
     header("Location: login.php"); 
     die(); 
    } 
?> 

を持って"SELECT user FROM login WHERE user = '$uid'"https://en.wikipedia.org/wiki/SQL_injection は、それを防止するための最も簡単な方法は、渡された変数をエンクロージャーあるユーザ名 として' or 1 or 'aを使用してみてくださいaddslashesであなたのquereに:

"SELECT user FROM login WHERE user = '" . addslashes($uid) . "'" 
0

のconfig.php

のsession_start();

DBの資格情報を//あなたもここに

あなたのDBの詳細

のinclude_once( 'config.phpの')do_login.php書くことができます。

あなたのログイン用コード。

page2.php

のinclude_once( 'config.phpの')。

print_r($ _ SESSION);

1

すべての最初の、私は強くことrecommand PPS : Prepared Parameterized Statementsの使用を検討してください。これはまた、Preventing SQL injection

を助ける、あなたはそれゆえ、ないストアプレーンテキストのパスワードをすべき:

あなたが本当にpassword_hashと彼の仲間の同僚password_verify

を使用することを検討すべきですそれ以外にも、あなたのコードを少し違うものにする:

- このように>変更generateResponse機能:

function generateResponse(data,uid){ 
if(data === "Error"){ 
    $("#status").text("user not found : make sure you are using correct credentials."); 
    $("input[name=uid]").val(""); 
    $("input[name=pwd]").val(""); 
} 
else { 
    window.location='page2.php'; 
} 
} 

- >

<?php 
session_start(); 

$connection = mysqli_connect("localhost","shreyansh","","ajax"); 
$query1 = "SELECT user FROM login WHERE user = '$uid' AND pass = '$pass' "; 
$result = mysqli_fetch_array(mysqli_query($connection,$query1)); 
// checking credentials 
$response = ""; 
if(count($result) == 0){ $response = "Error"; } else { $_SESSION['username'] = $uid; $response = ""; } 
echo $response; 

?> 

(PPSがより安全になるところだ)だけ1つのクエリを使用 - >最後に、の誤用を訂正page2.phpで$ _SESSION(CREDITは@に行くディミトリ-L)

<?php 
session_start(); 
if(!isset($_SESSION['username']) || empty($_SESSION['username'])) 
{ 
header("Location: login.php"); 
} 
else 
{ 
?> 
<p>Hello <?php echo $_SESSION['username']; ?></p> 
<?php 
} 
?> 
関連する問題