PHPでCookieやセッション、メールの管理を行う方法について紹介します。
ログインページ(認証画面)
PHPでは、header関数を用いてログインページ(認証画面)を作ることが出来ます。
header関数は、HTTPヘッダをクライアントに送信することができます。
Apacheを起動し、phpファイルにブラウザでアクセスすると認証画面が出てきます。
ユーザー名:fubuki パスワード:kongo
を入力すると、「ログインに成功しました」と書かれたページにアクセスできます。
【Cokkie】クッキーの管理
Cookie(クッキー)とは、クライアント側(ページ閲覧者)にデータを保存するためのものです。
入力履歴などをクッキーに書き込んでクライアント側に保管してもらうことで、再びページを閲覧したときに、途中まで入力したデータを復元したりできます。
PHPでは、setcookie関数を使うことで、クッキーを作成して、クライアント側へ送信し保存させることができます。
【書式】
setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]] )
引数 | 内容 |
---|---|
name | クッキーの名前 |
value | クッキーの値 |
expire | クッキーの有効期限 |
path | クッキーの有効パス |
domain | クッキーの有効ドメイン |
secure | 1:HTTPS接続のみクッキー送信、0:デフォルト |
返り値:TRUE(正常終了)
ページにアクセスしたクライアントに、以下のクッキーを送信して保存させることができました。
クッキー名:'クッキー名' 値:'クッキーの値'
$_COOKIEを使うことで、Cookieを読み込んで、保存した値を取得できます。
【書式】
$_COOKIE["クッキー名"]
返り値:指定したクッキー名のCookieに保存された値
setcookie関数でCookieの作成と削除ができます。
【書式】
setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]] )
引数 | 内容 |
---|---|
name | クッキーの名前 |
value | クッキーの値 |
expire | クッキーの有効期限(秒単位) |
path | クッキーの有効パス |
domain | クッキーの有効ドメイン |
secure | 1:HTTPS接続のみクッキー送信、0:デフォルト |
返り値:TRUE(正常終了)
【削除】
Cookieを削除する場合は、有効期限をマイナスにします。
例)setcookie(クッキー名, クッキーの値, time() – 3600);
「time() – 3600」で今よりも過去の時刻が有効期限となり、Cookieが削除されます
setcookie関数を複数呼び出すことで、Cookieを複数作れます。
ただし、クライアントは1つのサーバから受信できるクッキーの個数は最大20個と決まっています。
その為、多くのクッキーを利用したい場合は、別のやり方を使う必要があります。
多くのクッキーを利用したい場合は、配列を使って書き込みを行います。
【Session】セッション管理
セッションとは、複数のページ間でデータを格納する仕組みです。
この仕組を使うことで、同じ閲覧者がページAで入力したデータを、ページBでも使えたりできます。
Cookie(クッキー)はクライアント側でデータを保管してもらうのに対して、セッションではサーバー側で保管します。
セッションでは、個々のクライアントに対して一意なセッションIDを作成します。
そして、クライアント側に「セッションIDを記述した識別用Cookie」を保存させます。
(セッションを使用する際には、Cookieも同時に用いることが多い)
PHPでは、session_start関数でセッションを作成できます。
【書式】
session_start()
■処理内容
①セッション未使用のクライアントからアクセスがあれば、セッションを開始して「セッションID」割り当て。
※セッションIDはクライアント側にクッキー名「PHPSESSID」で保存
②セッション使用中(クッキーにセッションIDがある)のクライアントからアクセスがあれば、サーバ側にあるセッション変数の利用準備。
ページをリロードすると、セッションIDが表示されます。
セッションを開始すると、サーバ側に値を保存します。
この値を「セッション変数」といいます。
個々のクライアント毎にセッション変数があり、どのクライアントのものかはセッションIDで識別します。
PHPでは、定義済みの変数「$_SESSION」で、セッション変数の作成を行います。
【書式】
$_SESSION[セッション変数名] = 値
ページを読み込むと、初回訪問時のみセッション変数に「訪問日時」を格納します。
セッションを開始すると、サーバ側に値を保存します。
この値を「セッション変数」といいます。
個々のクライアント毎にセッション変数があり、どのクライアントのものかはセッションIDで識別します。
PHPでは、定義済みの変数「$_SESSION」で、セッション変数の値を取得できます。
【書式】
$変数名 = $_SESSION[セッション変数名]
※ページをリロードするたびに、「前回の訪問日時:2017-03-11T05:02:02+01:00 」などと最終訪問日時が更新されて表示されます。
unset関数でセッション変数を削除できます。
【書式】
unset ( $_SESSION(変数名) );
カンマ区切りで複数の変数名を指定することもできます
定義済み変数$_SESSIONに空の配列を代入することで全てのセッション変数を削除できます。
【書式】
$_SESSION = array();
session_destroy関数を用いてセッションの登録データを全て破棄できます。
(※セッションに関するグローバル変数とセッションクッキーの破棄は行いません)
【書式】
session_destroy();
■返り値
True:成功、FALSE:失敗
セッション名とは、セッションを開始した際にクライアント側の保存するCookie名です。
※デフォルトでは「PHPSESSID」でphp.iniで設定されています。(iniファイルの編集でデフォルト値の変更可)
PHPでは、session_name関数でセッション名を取得したり変更できます。
【書式】
session_name ( 新しいセッション名 )
■返り値
現在のセッション名
※引数に何も指定しない場合は、セッション名を変更せず、現在のセッション名の取得だけ行えます
セッションIDは、デフォルトのままだとランダムな値が設定されます。
PSPでは、session_id関数でセッションIDを任意に設定・変更できます。
【書式】
session_id ( ID名 )
■返り値
現在のセッションID
※引数にID名を指定しない場合は、IDの取得だけ行えます。
session_regenerate_id」関数でセッションを終了させずに、セッションIDだけを新しい値に更新できます。
このように、セッションIDを定期的に更新することとで、第三者にセッションを乗っ取られることを防ぎ、サイトのセキュリティ性を向上できます。
【書式】
session_regenerate_id ( 論理値 )
■引数
True: 古いセッション情報を削除 (デフォルトはFalse)
※データ量増大とセキュリティ面の問題から、古いセッション情報は削除した方がいいです
■返り値
成功:True、失敗:False
ログアウト
ログアウト処理を行う流れは以下の通りです。
①セッション変数を全て削除
②セッションクッキー(セッションIDが書かれたCookie)を削除
③セッションの登録データを削除
【セッション変数を作成・更新するページ】
【ログアウト処理用のページ】
ページの「ログアウト」リンクをクリックするとログアウト処理がされます。
コメント