【初心者向け】PHPのセッションとは?使い方をわかりやすく解説します

こんにちは。最近傘を新調したので、実は雨の日が楽しみなひろです。

皆さんは、PHPで「セッション」や「Cookie」というものを聞いたことはありますか?

セッションとCookieは、ウェブ開発を行う上で絶対に欠かすことのできない基礎知識の一つになります。また、よく聞かれる「セッションとCookieの違い」も解説しますので、ぜひこの記事を読んで、使い方をマスターしましょう!

セッションとはサーバーに一時的なデータを保存する手法

それでは、まずはセッションについて解説します。セッションは、一時的なデータをサーバーに保存する事ができる仕組みです。ブラウザにはセッションIDという鍵をブラウザに保存しておくことで、ページを訪れた際にIDを照合することでデータを取得することができます。

使うにはsession_start関数を使う

使用するにはsession_start()という関数を使用すればすぐに使用することができます。

使用するページには必ず記述するようにしましょう。また、理由は後述しますが、セッションを使用する際にはsession_regenerate_id()という関数も一緒に使用するようにしましょう。

$_SESSIONというあらかじめ用意された変数を使用できる

セッションを使うと、$_SESSIONという関数を使用することができます。これはログイン状態の保持などに使うことができ、非常に使い勝手の良い変数です。

$_SESSIONはページをまたいで使うことができる変数

$_SESSIONはページをまたいで使うことができるので、例えばショッピングサイトでカートに入れた商品などを、別のページに行っても保持する事ができます。

ウェブ開発を行う上で、セッションの使い方は必ずマスターしたい理由の一つが、「使われているウェブサービスが非常に多い」という理由になります。

Cookieとはブラウザに一時的にデータを保存する方法

それでは、セッションと似て非なるCookieについて解説します。

一時的なデータを保存するCookieとセッションの最大の違いは、「サーバーではなくブラウザが保存している」という点です。

ホームページなどの訪問した履歴やデータを一時的に保存する

どのようなホームページに行ったかなど、履歴を一時的に保存することができます。ショッピングサイトなどで、「このページは2020/1/1に訪れました」などの情報が表示されることがありますが、基本的にはこのCookieを使うことで実装することができるのです。

セッションIDもCookieの中に保存されている

セッションIDという鍵がブラウザに保管されている、と冒頭で解説しましたが、このセッションIDはCookieに保存されています。なので、Cookieを削除すると使用していたセッションも取得することができなくなります。

ブラウザに保存されている情報なので、ユーザーも見ることができる

ブラウザに保存されている情報になるので、ユーザーもCookieの中身を見ることができます。chromeの場合であれば、chromeデベロッパーツールを開き、「Application」というタブを開くと、Cookieを確認できます。

chromeデベロッパーツールは右クリックで表示される項目の「検証」を開く、もしくはF12キーを押すことで開くことができます。

セッションを使う際によく使う関数

より具体的に、セッションの使い方を解説します。ここでは、セッションを使用する際よく併用される関数を紹介します。

セッションの保管場所を変更するsession_save_path関数

セッションの保管場所を変更するsession_save_pathという関数があります。以下のように使用します。

引数で保管場所を渡すことで、保管場所を変更できます。引数に「/var/tmp/」を指定することで、セッションを30日間は削除されなくするよう設定することができます。

セッションの有効期限の設定はini_set関数で設定可能

セッションの有効期限を任意に設定するには、ini_set関数を使用します。

ガベージコレクションというのは、プログラムが不要になった情報を削除することで動作を快適にさせる機能のこと。

このガベージコレクションによってセッションは削除されるのですが、第一引数に「session.gc_maxlifetime」を、第二引数に数値を入力することで、その秒数は削除されなくなります。

クッキーの有効期限の延長もini_set関数で設定可能

こちらもini_set関数を使用します。

先ほど紹介したCookie自体が削除されてしまうと、セッションIDもなくなってしまいます。

セッションの有効期限を伸ばす場合は、こちらの設定の併用も必要です。第一引数に「session.cookie_lifetime」を、第二引数に数値を入力することで、クッキーの有効期限を任意に設定することができます。

セッションIDを都度置き換えるsession_regenerate_id関数

セッションIDを都度置き換えることで、セッションハイジャックと呼ばれる攻撃の対策を取ることができます。

基本的にはセッションを利用する際には、このsession_regenerate_id関数を使用するようにしましょう。

セッションを削除することができるsession_destroy関数

セッションを削除します。ログアウトなどに使用される関数です。

$_SESSIONの中身をすべて消すために、まず$_SESSIONの中身を空にします。その後、セッションを切断するためにセッションクッキーも削除し、最後にsession_destroy()でセッションを破壊しましょう。

このsession_destroy関数は、不安定なネットワークの状態(不安定なWi-Fiなど)では動作が保証されていません。どんな関数もそうですが、実装するときには必ず動作確認をするようにしましょう。

使用上の注意

セッションハイジャックという攻撃方法がある

セッションハイジャックというのは、セッションIDが何らかの理由で外部に漏れることにより、不正なログインが行われたり、個人情報が盗まれてしまう攻撃のことです。完全に防ぐのは難しいですが、session_regenerate_id関数を使用したり、ログアウトなどの際にきちんとセッションを削除してあげることが対策として用いられています。

まとめ

いかがでしたか?今回は、

セッションの使い方

について解説しました。紹介した関数を適材適所使い分け、ぜひ取り入れてみてくださいね。