3

php-login.net のログイン スクリプトを変更して、より安全にしようとしています。この特定のログイン スクリプトには、ユーザーのログイン時に Cookie 変数とセッション変数の両方を設定するログイン クラスがあります。

/**
 *  write user data into PHP SESSION [a file on your server]
 */
   $_SESSION['user_name'] = $result_row->user_name;
   $_SESSION['user_email'] = $result_row->user_email;
   $_SESSION['user_logged_in'] = 1;

/**
 *  write user data into COOKIE [a file in user's browser]
 */
   setcookie("user_name", $result_row->user_name, time() + (3600*24*100));
   setcookie("user_email", $result_row->user_email, time() + (3600*24*100));
   $this->user_is_logged_in = true;

残念なことに、ユーザーがアクセスするページでは、そのページにアクセスしたときにユーザーがログインしていることを確認するチェックを誰も書きませんでした。そのため、URL を直接入力するだけであれば、ログインする必要はありません。

ユーザーがログインしたことを確認する最善の方法を知りたいです。現在、これを使用していますが、冗長かどうかはわかりません (つまり、Cookie 変数は常にセッション変数と等しいので、チェックしても意味がありません)。両方?) 任意の入力が役に立ちます。

session_start();
if(!(isset($_COOKIE['user_email']) && 
    isset($_SESSION['user_email']) &&
    ($_COOKIE['user_email']===$_SESSION['user_email']) &&
    isset($_COOKIE['user_name']) && 
    isset($_SESSION['user_name']) && 
    ($_COOKIE['user_name']===$_SESSION['user_name']) && 
    isset($login) && 
    $login->isUserLoggedIn())){
        header("location:../../index.php");
        exit;
     }

(フォーマットが不十分なコードで申し訳ありません。このサイトのテキストフォーマットのニュアンスをまだ理解しようとしています)

4

1 に答える 1

2

セッションを使用する場合、サーバー側の php セッションにマップされるセッション ID を持つ Cookie が既に存在します。そこに登録するすべてのデータは、グローバルな $_SESSION 配列で利用できます。Cookie とサーバーの両方にデータを保存することは、通常は無意味です。

データを Cookie にも保存する唯一の理由は、Cookie データを共有する必要がある同じドメイン名のサイトが他にもある場合です。

于 2012-11-09T12:29:04.350 に答える