「PHP/条件分岐」の版間の差分

setcookie のコード例
(クッキーの話を忘れてたので追加。)
(setcookie のコード例)
 
さらにMySQLなどのデータベース・ソフトウェアを使うことで、ユーザー名やらパスワード名などの会員情報は、MySQLなどに保管します。実務では、あまり、PHPのコード内やテキストファイルなどで直接にパスワードなどを保管することは無いです。
 
== クッキーの入れ方 ==
クッキーを使う前に、まずはメインページを作る必要があります。
 
wikibooksでも、メインページに、もしログアウトしている状態もしくは未登録の状態でアクセスすれば「ログインしていません」と右上あたりに表示されているのと同様です。
 
* メイン画面の例
まず、私たちの自作するメインページは、おおむね下記のようなコードになるでしょう。
 
;メイン画面のコード(PHP)
<syntaxhighlight lang="PHP">
<?php
$kukiFlag = $_COOKIE['kukites1'] ;
 
if(isset($kukiFlag)) {
echo "ログイン中。<br>" ;
}
 
else {
echo "ログインしていません。<br>" ;
}
 
?>
 
<html>
<body>
<a href="loginTest.html">ログイン</a> <br>
<br>
<p>(※ ここにメインコンテンツが表示される。)</p>
</body>
</html>
</syntaxhighlight>
 
 
当然、最初にこのページを表示したとき、まだクッキーを作ってないので、「ログインしていません」と表示されます。
 
hrefタグは、文章や画像などにクリック時に別ページにリンクする機能をつけるためのプロパティです。HTMLのどの入門書にも hrefタグは解説が書いてあるので、本PHP教科書ではhrefの説明は省略します。
 
 
 
さて、上記メインページから、ログイン画面に映ります。
 
* ログイン画面の例
ログイン画面のコードは、すでに前の節で作成したのと同じで構いません。下記にコードを再掲します。
 
;ログイン画面のコード
<syntaxhighlight lang="PHP"><form action="logincatchTest.php" method="post" >
ユーザー名: <input type="text" name="username1" id="box_user" ><br>
パスワード: <input type="text" name="password1" id="box_pass" ><br>
 
<input type="submit" value="ログイン" id="button1">
</form>
</syntaxhighlight>
 
 
ログイン画面では、まだクッキーは作成'''しない'''です。
 
 
クッキーを作成する時期は、ログインに成功'''したあと'''です。
 
 
 
* ログイン成否の確認画面の例
さて、ログインの成否の確認画面が、下記のように変わります。
 
<syntaxhighlight lang="PHP"><form action="logincatchTest.php" method="post" >
<?php
 
if( $_POST['username1'] == "yamada" && $_POST['password1'] == "aikotoba" ){
 
setcookie("kukites1", "123",time()+ 30 ); // 30秒の保存期間
 
echo "ログイン成功。<br>" ;
}
 
else {
echo "やりなおしてください。ログインに失敗しました。<br>" ;
echo $_POST['username1'],"と入力されました。<br>" ;
}
 
?>
 
<html>
<body>
<br>
<a href="kukiTesM.php">メインページに戻る</a> <br>
</body>
</html>
</syntaxhighlight>
 
setcookie()関数で、クッキーをブラウザに与えます。
 
書式は
<code>setcookie(クッキー名, 値, time() + 時間 ); </code>
です。
 
 
上記コードでは、安全のため、30秒の経過でクッキーが消失するようにしています。
 
つまり
:<code>setcookie(クッキー名, 値, time() + 保存の秒数 ); </code>
という書式です。
 
なので、もし
:<code>setcookie(クッキー名, 値, time() + 30 ); </code>
なら、30秒でクッキー消失します。
 
 
たとえば
:<code>setcookie(クッキー名, 値, time() + 60*60*24*2 ); </code>
なら、2日間、クッキーが残ります。ぴったり2日間経過した直後の瞬間に、クッキーが消えます。
 
30秒でクッキー消失します。
 
さて、上記コードでは、
またクッキーとは別に、ログイン成功したあとにメインページに戻る機能も必要なので、hrefタグでメインページに戻るリンク文も追加しています。
 
なお、上記コードでは実はログイン失敗しても「メインページに戻る」リンク文が表示されるのですが、説明の単純化のため、上記コードのままにします。(クッキー以外のif文が増えると、説明がややこしくなるので。)
 
 
 
* 実験例
では、上記3個のページのコードすべてが完成したら、ローカルサーバーにアップロードしてみて、ブラウザからメインページにアクセスしてみてください。
 
そして、ログインしてください。ユーザー名「yamada」、パスワード「aikotoba」です。
 
ログイン成功したら、すぐに30秒以内にリンク文を押して、メインページに移動してください。
 
そして、メインページの表示中に、キーボードのファンクションキーのF5ボタンを押して、リロードしてください。
 
30秒以内なら、クッキーが保存中なので「ログイン中」とメインページで表示されます。
 
 
さて、F5ボタンを飽きるまで、何回か押して、なんどかリロードして、いろいろと試してください。
 
 
もし30秒経過後にリロードすると、もはやクッキーが消失しているので「ログインしていません」と表示されます。
23,094

回編集