1

PHP セッション ベースのログインについていくつか質問があります。次のチュートリアルを使用して、既存のユーザー データベースに接続するログイン フォームを作成しました。

http://www.sourcecodester.com/tutorials/php/4341/how-create-login-page-phpmysql.html

私はそれのほとんどを理解していますが、私が理解していないいくつかのことを照会したいだけです:

//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['username'];
$_SESSION['SESS_LAST_NAME'] = $member['password'];
session_write_close();
header("location: home.php");
exit();

次のコードは login_exec.php ページに挿入されます。このコードは、ログインが成功したときにセッション ID を設定していると思いますが、正しいですか?

私が理解していないのは、「SESS_MEMBER_ID」、「SESS_FIRST_NAME」、および「SESS_LAST_NAME」の理由です-なぜそれがあり、正確に何をしているのでしょうか?

2 番目の質問です。「home.php」では、ユーザーが「ログアウト」をクリックすると、index.php に戻され、何らかの形でセッションが破棄されます。「ログアウト」をクリックすると、セッションがどのように破壊されるのでしょうか。

第三に、「home.php」を変更して、「logged_in がエコーする場合は「yay、ログインしています」などの if/else ステートメントが配置されるようにすることは可能ですか? not_logged_in echo "ログインしていないため、このページを表示できません。次のページに移動してログインしてください". 可能であれば、どうすればよいですか?

どうもありがとう

4

2 に答える 2

3
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['username'];
$_SESSION['SESS_LAST_NAME'] = $member['password'];

次のコードは login_exec.php ページに挿入されます。このコードは、ログインが成功したときにセッション ID を設定していると思いますが、正しいですか?

はい、セッションを設定し、保存する前に一部のメンバー情報をセッション自体に保存します。そうすれば、データベースにさらにクエリを実行しなくても情報を利用できます。さらに、情報が存在しない場合、ユーザーが認証されていないことがわかります。

全体を保存することもできます$member

$_SESSION['member'] = $member;

ただし、そうすることでパスワードも保存されます。以降のすべてのページのセッションでパスワードを非表示にすることはお勧めできません。ただし、これを行うことができます:

unset($member['password']);    // $member is a copy of the database row, untouched.
$_SESSION['member'] = $member;

2 番目の質問です。「home.php」では、ユーザーが「ログアウト」をクリックすると、index.php に戻され、何らかの形でセッションが破棄されます。「ログアウト」をクリックすると、セッションがどのように破壊されるのでしょうか。

通常、これはリダイレクトとsession_destroy.

第三に、「home.php」を変更して、さまざまなログインコンテンツで「if logged_in echo "yay, you are login"」のような if/else ステートメントが配置されるようにすることは可能ですか?

はい、上記の $_SESSION を使用します:

<?php
    if (!empty($_SESSION['SESS_MEMBER_ID']))
    {
?>

    Welcome, <?php print $_SESSION['SESS_FIRST_NAME']; ?>!

<?php
    } else {
?>
    Sorry, you need to <a href="login.php">LOGIN!</a>
<?php
    }
?>
于 2012-11-06T17:54:27.047 に答える
0

はい:session_regenerate_id();セッション ID を設定しています。

他のセッション変数 (SESS_MEMBER_ID など) が設定されているため、データに対して常にクエリを実行する必要はありません。したがって、これらの変数 (ID、姓名) はセッションに保存されます。そのため、単に<? echo "Welcome ".$_SESSION['SESS_FIRST_NAME']; ?>「Welcome Zach」に対して実行できます... さらに、セッション データがそのメンバーのデータベース レコードと一致することを確認して、スプーフィングされていないことを確認できます。

第三に、あなたはできる

if(!empty($_SESSION['SESS_MEMBER_ID'])){ echo "Yay ".$_SESSION['SESS_FIRST_NAME'].", you are logged in"; }else{ echo "XX"; }
于 2012-11-06T17:52:33.900 に答える