11

うまく機能するログインフォームを作成しました。しかし、ユーザーが誘導されたページには、まだ誰でもアクセスできることに気付きました。ログインしているユーザーだけがアクセスできるページを保護するにはどうすればよいですか?

成功ページ自体にスクリプトを配置する必要がありますか?

ここに私のcheck_login.phpがあります:

<?php
$host="localhost"; // Host name
$username="xxx"; // Mysql username
$password="xxx"; // Mysql password
$db_name="xxx"; // Database name
$tbl_name="xxx"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password") or die("cannot connect");
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);

$count=mysql_num_rows($result);

$user_info = mysql_fetch_assoc($result);

 if( isset($user_info['url']) ) {

 session_register("myusername");
 session_register("mypassword");
     header('Location: ' . $user_info['url']); //Redirects to the supplied url from the DB
 } else {
  header("location:error.htm");
 }
 ?>
4

5 に答える 5

9

すべてのページは で始まる必要があります

session_start();

session_register( "variablename" )PHP バージョン 4.2 以降では使用しないでください。

$_SESSION["variable"] = value;

そのため、is-logged-it チェックを含むページの例は次のようになります。

<?php
session_start();
if($_SESSION["loggedIn"] != true) {
    echo("Access denied!");
    exit();
}
echo("Enter my lord!");
?>

およびログイン スクリプト:

<?php
    /*
        ... db stuff ...
    */

if( isset($user_info['url']) ) {
    $_SESSION["loggedIn"] = true;
    $_SESSION["username"] = $myusername;
    header('Location: ' . $user_info['url']); //Redirects to the supplied url from the DB
} else {
    header("Location: error.htm");
}
?>
于 2011-07-24T22:56:42.190 に答える
4

ユーザーのログインが必要なページで、有効なセッションがあるかどうかを確認します。そうでない場合は、ログイン ページに送信します。

if (!$_SESSION['myusername'])  
{  
    header('location: /login.php');  
    exit;  
}
于 2011-07-24T22:48:55.767 に答える
2

アクセスが制限されている各ページ/コンテンツでは、クライアント/ユーザーを認証する必要があります。人々が頭がおかしくなったら、すべてのページでユーザーに詳細 (ユーザー名/パスワード) を入力させる必要がありますが、「HTTP Cookie」のおかげで、その必要はありません。

于 2011-07-24T22:47:51.693 に答える
1

基本的にセッション管理を使用して、ユーザーが認証されたセッションにいるかどうかを追跡する必要があります。そうでない場合は、それらをインデックス ページに (再) リダイレクトします。はいの場合は、リクエストしたリソースへのアクセスを許可します。

セッションを使用するには、アプリケーション内のすべての PHP スクリプトの先頭にセッション設定関数を配置し(設定関数には、セッション ハンドラー、Cookie ドメイン、および Cookie 名が含まれます) session_start()、. 次に、現在のセッションで のようにログイン フラグが定義されているかどうかを確認します$_SESSION["user_is_logged_in"]。もちろん、認証ページでは、$_SESSION["user_is_logged_in"] = true;ある段階で定義します。

于 2011-07-24T22:54:31.487 に答える