PHPでログイン機能やカウンターなど、セッションを使った機能をご紹介します。
初心者には敷居が高いイメージがありますが、実際に作ってみると意外と簡単に実装できます。
なるべく分かりやすくご説明していますので、まずはサンプルコードをコピーして、自分の環境で動かしてみましょう。
目次
セッションとは
セッションとは、データを保存しておく仕組みのことで、リロードしたり複数ページにまたがってもデータは消えません。
セッション使用例
以下のようなシステムでセッションが使われています。
- アクセスカウンター
ページが切り替わっても、アクセス数はリセットされずどんどん加算されます。 - ログイン機能
ページが切り替わっても、ログイン状態はキープします。 - ショッピングカート
ページが切り替わっても、商品はカートに入ったままです。
セッションはページが切り替わっても、サーバー側に保存されているため、データは残り続けます。
ただ、ブラウザを閉じると消えてしまうため、cookie(クッキー)などと併用して使われます。
セッションの基本的な使い方
セッション変数の値を表示
まずはセッションを使った簡単なコードを書いてみます。
1 2 3 4 5 6 7 8 |
// セッション開始 session_start(); // セッション変数に値を入れる $_SESSION['user'] = 'nagasawa'; // セッションの内容を表示 echo $_SESSION['user']; |
nagasawa
セッション変数に格納した値が表示されました。
それぞれの意味を見てみましょう。
説明
session_start();
セッションを作ります。
セッションを利用するためには、まずsession_start()
と入力します。
これをやらないと、セッションが使えません。
$_SESSION[‘user’] = ‘nagasawa’;
$_SESSION
とはPHPであらかじめ設定してあるスーパーグローバルと呼ばれるセッション変数です。
user
という変数名を付けたセッション変数に、nagasawa
という値を格納しています。
変数名は好きに付けていいですよ。
echo $_SESSION[‘user’];
セッション変数の中身をecho
で表示させました。
セッションを破棄する
session_destroy() でセッションを破棄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// セッション開始 session_start(); // セッション変数に値を入れる $_SESSION['user'] = 'nagasawa'; // セッションの値を初期化 $_SESSION = array(); // セッションを破棄 session_destroy(); // 中身を確認 var_dump($_SESSION['user']); |
NULL
null
となり、完全にセッションを破棄できました。
セッションを破棄するには以下の手順で行います。
- セッションの値を初期化する
$_SESSION = array(); - セッションを破棄する
session_destroy();
必ずセッションの値を初期化してセッションを破棄しましょう。
session_destroy
でセッションを破棄しても、セッション変数に入ってる値までは削除できません。
逆にarray()
でセッション変数を初期化しただけでは、サーバーに保存されたセッションまで削除することはできません。
両方とも処理すべきでしょう。
特定のセッションをunsetで削除する
unset()
を使って特定のセッションだけを削除することもできます。
1 2 3 4 5 6 7 8 9 10 11 |
// セッション開始 session_start(); // セッション変数に値を入れる $_SESSION['user'] = 'nagasawa'; // 所定のセッションを削除 unset($_SESSION['user']); // 中身を確認 var_dump($_SESSION['user']); |
NULL
unset()
を使った方法だと、セッション自体は生きていますので、指定したセッション変数以外は値が格納されたままです。
複数のセッション変数を使っていて、特定のセッションだけを削除したい場合に使います。
使ってはいけないセッション削除方法
以下のような使い方はやめましょう。
unset($_SESSION);
$_SESSION
自体をunset()
してしまうと、全ての$_SESSION
が初期化され、セッション変数の登録ができなくなってしまいます。
session_unset();
session_unset
は$_SESSION
を使っていない古いコードでのみ使うよう、マニュアルにも注意書きがあります。
cookie
は今回使ってないよ?という方もいらっしゃるかもしれません。
ただ、セッションはサーバーに保存されますが、セッションIDはcookie
に保存されるため、クライアント側に残ります。
セッションを完全に削除するなら、cookie
に残されたセッションIDも削除すべきでしょう。
セッションを使ったサンプル
アクセスカウンター
セッションを使った簡単なアクセスカウンターのサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 |
// セッション開始 session_start(); if (isset($_SESSION['count'])) { // 2回目以降 $_SESSION['count']++; echo $_SESSION['count'].'回目の訪問'; } else { // 1回目 $_SESSION['count'] = 1; echo '初めての訪問'; } |
リロードしていくと以下のように表示が変わります。
1回目
初めての訪問
2回目
2回目の訪問
3回目以降は「○回目の訪問」と、○の数値が増えていきます。
説明
session_start()
でセッション開始isset()
で$_SESSION['count']
に値が入っているかをチェックし、if文で条件分岐- 最初は値が入っていないので
else
側の処理が働き、1
を格納し初めての訪問
と表示させる - すでに
1
が格納されたので、++
でオートインクリメントし、値を1
ずつ追加
○回目の訪問
と表示させる
他にもメールフォームでページ遷移した際の値の保存など、使いドコロ満載なので、セッションの基本はおさえておきましょう。
session_start() を省略する方法
セッション使用時に必ず必要なsession_start()
ですが、複数ページに設定するのは面倒だし、設定漏れによるバグの原因にもなりますね。
php.ini で設定する
PHPの設定ファイル「php.ini」のsession.auto_start
を書き換えます。
特に設定していない場合、以下のようになっているでしょう。
session.auto_start = 0
この値を1
にするだけで設定完了です。
session.auto_start = 1
レンタルサーバーなどではphp.iniの設定自体できないところもあるかと思いますが、もしphp.iniの設定ができるのであれば、お好みで設定しても良いかもしれません。