PHPのセッション管理・破棄の方法($_SESSION)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPでログイン機能やカウンターなど、セッションを使った機能をご紹介します。

初心者には敷居が高いイメージがありますが、実際に作ってみると意外と簡単に実装できます。

なるべく分かりやすくご説明していますので、まずはサンプルコードをコピーして、自分の環境で動かしてみましょう。

 

セッションとは

セッションとは、データを保存しておく仕組みのことで、リロードしたり複数ページにまたがってもデータは消えません。

セッション使用例

以下のようなシステムでセッションが使われています。

 

  • アクセスカウンター
    ページが切り替わっても、アクセス数はリセットされずどんどん加算されます。
  • ログイン機能
    ページが切り替わっても、ログイン状態はキープします。
  • ショッピングカート
    ページが切り替わっても、商品はカートに入ったままです。

セッションはページが切り替わっても、サーバー側に保存されているため、データは残り続けます。

ただ、ブラウザを閉じると消えてしまうため、cookie(クッキー)などと併用して使われます。

セッションの基本的な使い方

セッション変数の値を表示

まずはセッションを使った簡単なコードを書いてみます。

nagasawa

セッション変数に格納した値が表示されました。

それぞれの意味を見てみましょう。

説明

session_start();

セッションを作ります。

セッションを利用するためには、まずsession_start()と入力します。

これをやらないと、セッションが使えません。

 

$_SESSION[‘user’] = ‘nagasawa’;

$_SESSIONとはPHPであらかじめ設定してあるスーパーグローバルと呼ばれるセッション変数です。

userという変数名を付けたセッション変数に、nagasawaという値を格納しています。

変数名は好きに付けていいですよ。

 

echo $_SESSION[‘user’];

セッション変数の中身をechoで表示させました。

セッションを破棄する

session_destroy() でセッションを破棄

NULL

nullとなり、完全にセッションを破棄できました。

セッションを破棄するには以下の手順で行います。

 

  1. セッションの値を初期化する
    $_SESSION = array();
  2. セッションを破棄する
    session_destroy();

必ずセッションの値を初期化してセッションを破棄しましょう。

session_destroyでセッションを破棄しても、セッション変数に入ってる値までは削除できません。

逆にarray()でセッション変数を初期化しただけでは、サーバーに保存されたセッションまで削除することはできません。

両方とも処理すべきでしょう。

特定のセッションをunsetで削除する

unset()を使って特定のセッションだけを削除することもできます。

NULL

unset()を使った方法だと、セッション自体は生きていますので、指定したセッション変数以外は値が格納されたままです。

複数のセッション変数を使っていて、特定のセッションだけを削除したい場合に使います。

使ってはいけないセッション削除方法

以下のような使い方はやめましょう。

unset($_SESSION);

$_SESSION自体をunset()してしまうと、全ての$_SESSIONが初期化され、セッション変数の登録ができなくなってしまいます。

 

session_unset();

session_unset$_SESSIONを使っていない古いコードでのみ使うよう、マニュアルにも注意書きがあります。

完全に削除するなら cookie も削除すべき

cookieは今回使ってないよ?という方もいらっしゃるかもしれません。

ただ、セッションはサーバーに保存されますが、セッションIDはcookieに保存されるため、クライアント側に残ります。

セッションを完全に削除するなら、cookieに残されたセッションIDも削除すべきでしょう。

セッションを使ったサンプル

アクセスカウンター

セッションを使った簡単なアクセスカウンターのサンプルです。

リロードしていくと以下のように表示が変わります。

1回目
初めての訪問

2回目
2回目の訪問

3回目以降は「○回目の訪問」と、○の数値が増えていきます。

説明

  1. session_start()でセッション開始
  2. isset()$_SESSION['count']に値が入っているかをチェックし、if文で条件分岐
  3. 最初は値が入っていないのでelse側の処理が働き、1を格納し初めての訪問と表示させる
  4. すでに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の設定ができるのであれば、お好みで設定しても良いかもしれません。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*