.net column
.NET開発者のためのブログメディア

【PHP】sessionとは?|sessionの説明から使い方まで分かりやすく解説!

2021年04月07日
SE
PHPでsessionを使いたいのですが、何か注意する点はありますか。
PM
PHPのsession変数を使えばECサイトの構築も簡単ですが、個人情報を扱う際はセキュリティ面でのリスクも知っておく必要があります。

sessionとは?


セッションとは、広義のコンピューター用語で「一連の処理のはじまりから終わり」を示す概念のことを言います。

例えば、Webサイトにアクセスしてそのページから出るという一連の処理があった場合、これを1つのセッションとして考えることができます。

通常の場合、ECサイトにログインして商品を買い物リストに追加し、購入ボタンを押すといった処理があれば、画面が切り替わるごとにセッションがリセットされ、ユーザーがログインした情報などが失われてしまいます。

そこで今回紹介する、狭義の意味でのsession(セッション)とCookie(クッキー)という仕組みを使えば、PHPでユーザー情報をWebサーバーに保持し、上記の処理を一連のものとして扱えるようになります。

sessionとCookieについて理解しよう

PHPでユーザー情報をWebサーバーに保持しておくためには、sessionとCookieという2つの仕組みを使う必要があります。Cookieもsessionのようにユーザーの情報を保持する仕組みです。

Cookieを使うと、ユーザーが入力した個人情報やログイン情報などを保持しておき、例えばログイン後に次の画面に移動してもログイン情報が失われずに次の処理ができるようになります。

PHPでCookieに情報を保持するためには、下記のように「setcookieファンクション」を利用します。

また、Cookieの情報を取り出す際には、$_COOKIE[‘クッキーの名前’]という配列を利用します。

Cookieとsessionの違いは?

Cookieもsessionも使い道は似ていますが、Cookieはクライアント側に情報が保存されるのに対し、sessionはサーバー側に情報が保存されるという違いがあります。

Cookieはクライアント側(ブラウザ)に情報が保存される上に、ブラウザを操作すれば保持された個人情報を盗み見ることもできるため、重要な情報を保存するのには向いていません。

sessionはCookieのように保存期間を決めることができず、「Webブラウザを閉じるまでしか情報を保持できない」という制限が存在しますが、その分Cookieに比べ安全に情報を保存することができます。

この2つを扱えるようになると、PHPでユーザーの個人情報やログイン状態などを管理できるようになります。

PHPでのsessionの使い方


それでは、PHPでsessionとCookieを扱う方法をいくつか解説していきます。

処理はそれほど複雑ではなく、基本はセッション関数を呼び出して、セッション変数に値を格納するといったシンプルな手順になります。

$_SESSIONはPHPで定義済みのスーパーグローバル変数なので、コード中のどこからでも使用することができます。

session_start関数の実行

PHPでsessionを使うには、はじめに「session_startファンクション」を使ってセッションIDを発行します。この処理コードは、sessionを使うページ全てに書かなければいけません。

セッションIDが発行されると、ランダムな英数字が羅列され、その情報がCookieに保存されます。その情報をもとに、ユーザーの個人情報などを引き出します。

「$_SESSION[‘セッションの名前’] = ‘セッションに保存する値’;」のように書くことで、保存したい値を変数に代入します。下記がその例です。

次に、index.phpでsessionに代入した値を、next.phpで取り出してみます。ここでも「session_startファンクション」を最初に記述し、「print($_SESSION[‘セッションの名前’]);」で値を表示します。

セッションIDの確認

現在のセッションIDを確認するには、「session_idファンクション」を使用します。

また、セッション名を確認する際には、「session_nameファンクション」を使用します。

sessionの削除

PHPでセッションを削除するには、下記のように「session_unsetファンクション」を使います。

session_unset ファンクションを使うと、全てのセッション変数が削除されます。もう一つの削除方法としては、下記のような個別のデータだけを削除する「unsetファンクション」を使ったものもあります。

sessionのセキュリティについて


sessionはユーザーの個人情報を扱っているので、sessionを使って何かサービスを提供する際にはセキュリティ対策をしっかり行っておく必要があります。

sessionは、CookieにセッションIDを保存しています。つまり、ブラウザでCookieにアクセスしてセッションIDを盗む技術があれば、簡単にユーザーのデータを悪用されてしまうリスクがあるのです。

セキリュティ対策の手段は多岐に渡っているので全てを網羅できませんが、下記でsessionセキュリティ対策事例をいくつか紹介します。

セッションIDの再発行をする

PHP公式では、セキリュティ的損害が許されないシビアな情報を扱う際、15分ごとにセッションIDを更新することが推奨されています。下記がセッションID更新のコード記述例です。

上記のコードを実行すると、ブラウザの再読み込みを行うたびに、セッションIDが変更されるのを確認できます。

httpsを使う

Webサイトのデータをやり取りする規約にはhttpとhttpsがありますが、ユーザーの情報を扱う際にはhttpsを使うのが基本となります。

httpsは通信内容が暗号化されるのに対し、httpは暗号化されていない状態で通信を行うことになります。そのため、httpはセキリュティ面でのリスクが非常に大きくなっています。

また、https通信の場合でのみCookieが使えるようにphp.iniファイルに下記の設定を行っておくと、httpの場合はCookieが送信されないようにできます。

Webサーバーのセキュリティ対策もする

sessionを安全に運用するためには、Webサーバーのセキリュティ対策も行っておく必要があります。

なぜなら、sessionのファイルはWebサーバーに保存されているので、Webサーバーへの不正アクセスがあった場合、sessionに保存された情報も盗まれるリスクがあるからです。

パスワードを複雑なものにしたり、強力なセキリュティソフトを導入したり、不要なアプリを削除するなどして、攻撃者が付け入るセキュリティの隙をできる限りなくすことが重要となります。

SE
PHPでのsessionは便利な反面、セキュリティ対策が必要なことがよく分かりました。
PM
その通りです。ご紹介した方法を参考にして、セキュリティ対策を十分にとっておくようにしましょう。

sessionを理解してPHPを活用しよう


PHPでのsession処理はシンプルなので、簡単なコード実装で個別のユーザーがECサイトを利用し、商品を購入する仕組みなどを構築することが可能です。

しかし、ユーザーの個人情報を扱う以上はセキュリティ面での課題をしっかり考え、追加の対策も行っていく必要があります。

今回ご紹介した知識でPHPへの理解を深めつつ、より安全なコードを追求していきましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags

Jobs