0

あなたがこれで私を助けてくれることを願っています(これも場合によっては!)

mysqlデータベース接続を使用しているphpログインシステムがあります。最初にユーザーがログインフォームに入力します。

Code: admin/index.php:

<link rel="stylesheet" href="/styles/style-new.css" type="text/css" />
<script type="text/javascript">
function formfocus() {
  document.getElementById('myusername').focus();
}
window.onload = formfocus;
</script>

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form action="/?module=admin&n=checklogin" method="post" enctype="multipart/form-data" name="form1" id="form1">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Administrator Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input type="text" name="myusername" id="myusername" tabindex="1"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="password" id="mypassword" tabindex="2"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td> <button type="submit" name="Submit" tabindex="3">Login</button>
 <img src="../images/ajax-loader.gif" width="16" height="16" style="display: none"/>
 <script>
    $("button").click(function () {
    $("img").show("slow");
    });
  </script>
 </td>
</tr>
</table>
</td>
</form>
</tr>
</table>
<p align="center">Clicked on the wrong link? <a href="javascript: history.go(-1)">Click Here</a></p>
</div>

次に、これはchecklogin.phpによる検証のために送信されます。

Code: checklogin.php:

<?php 
sleep(3)
?>
<link rel="stylesheet" href="../styles/style-new.css" type="text/css" />

<?php
session_start();
$host="localhost"; // Host name 
$username="david_bpd"; // Mysql username 
$password="documents123456"; // Mysql password 
$db_name="david_bpd"; // Database name 
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die(mysql_error()); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql) or die(mysql_error());

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row


$cdata = mysql_query("SELECT * FROM cuser");
$cdata = mysql_num_rows($cdata);
echo $cdata;


if($count==1){
//If a user is not already logged on
if($cdata == 1){
echo "<meta http-equiv='refresh' content='0;url=/?module=admin&n=Login_unavailable'>";
}
else {
//Register username
echo $myusername;
$_SESSION['myusername'] = $myusername;

var_dump($_SESSION['myusername']);

$_SESSION['myusername'] == $myusername;


$sql2="INSERT INTO cuser(myusername)VALUES('$myusername')";
$result2 = mysql_query($sql2) or die(mysql_error());

echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=Login_success">';

}
}
elseif($count==0) {
echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=Login_Unsuccessful">';
}
?>

<?php
mysql_close();
?>

admin/Login_name.php:次に、mysqlデータベースの最後のアクセス名をチェックして再登録するを使用して再登録されます。

<?php
/* Mysql connection */
$tbl_name="cuser"; // Table name

$query = "SELECT MAX(`id`) AS 'max' FROM $tbl_name";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$max = $row['max'];
$query1 = "SELECT * FROM $tbl_name WHERE id= '$max'";
$result1 = mysql_query($query1) or die(mysql_error());
$row1 = mysql_fetch_row($result1);

//check username
$myusername=$row1[1];

//register username
$_SESSION['myusername'] = $myusername;

?>

私が抱えている問題は、これを使用して管理領域へのアクセスを制限する必要があることです。

Code:

<?php
session_start ();
    if ($_REQUEST ['module'] == 'admin' && $_REQUEST ['n'] != 'index' && $_REQUEST ['n'] != 'Login_Unsuccessful' && $_REQUEST ['n'] != 'checklogin' && $_REQUEST ['n'] != 'Logout' && $_REQUEST ['n'] != 'Login_name') {

        include ("admin/Login_name.php");
        // var_dump ( $myusername );
        //echo $myusername;
        //echo "<br />";
        //echo "<br />";
        if (isset ( $_SESSION ['myusername'] )) {
            //var_dump($myusername);
            //echo "SESSION IS SET";
            if ($_SESSION ['myusername'] == $myusername) {
                //echo "User should be allowed to be on page";
            } else {
                //echo"User not allowed";
                echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=index">';
            }

        } else {
            //var_dump(($_SESSION['myusername']));
            //echo "SESSION IS NOT SET(username not registered)";

            echo '<meta http-equiv="refresh" content="0;url=/?module=admin&n=index">';
        }
    }
    ?>

私が見つけた問題は、管理者がすでにログインしている場合でも、ログインしていない人は制限された領域にアクセスできますが、それが発生したくないということです。

ソースコードの最後のビットにあるifステートメントと関係があると思いますが、わかりません。

何か案は?

ありがとう

PS長い投稿で申し訳ありませんが、完全に説明する唯一の方法です!

4

2 に答える 2

1

これについては別の考えがあります。

ユーザーとアクティブユーザーをチェックするために二重クエリを実行する代わりに、テーブルユーザーテーブルアクティブユーザー間の単一結合クエリで実行できます。

テーブルユーザーにはフィールドが含まれます

  • ユーザーID
  • user_name
  • パスワード
  • 等...

テーブルactive_usersには、フィールドが含まれています。

  • ユーザーID
  • login_time
  • セッションID
  • 等...

次に、select join queryを実行して、ユーザーがテーブルusersからの有効な情報を持っているかどうか、およびユーザーがテーブルactive_usersをチェックインしたかどうかを確認できます。

次に、制限された領域について、ユーザーセッションと照合して確認できます。ユーザーがページ/エリアにアクセスしようとする場合は、ユーザーセッションに基づいて割り当てられたユーザー特権を再確認します。

これがお役に立てば幸いです。

于 2011-06-19T19:08:06.250 に答える
1

このようなことをすると、ユーザーのログインを確認しやすくなると思います。

session_start();
if(isset($_SESSION['user']) && $_SESSION['user']['admin']){
  // let user to admin page
}else{
  // deny access
}

したがって、フォームを処理するときは、とをtrue$_SESSION['user']に設定するだけです。$_SESSION['user']['admin']

繰り返しますが、これは単純なログイン方法です。

于 2011-06-19T19:11:06.240 に答える