セッションとは何かについては「クッキー、セッション、キャッシュの違い」の記事でも解説しています。
セッションとは、一般的にはサイトに訪れてから離脱するまでの一連の操作を管理できます。
ちょっと具体的に説明すると、サイトに訪れたときにサーバー側でセッションIDというのを発行しデータを一時的に保存します。
セッションIDはブラウザに返され同じサイトに訪れたときに再度サーバーに渡されて以前のデータを引き継いで画面の表示を切り替えたりできるものです。
WEBサイトを構築するときにはセッションを使うことが多いと思います。
今回はPHPでこのセッションにデータを追加したり、データを取得したりする方法について説明します。
PHPでセッションを使う場合のスーパーグローバル変数
セッションを操作する場合にはスーパーグローバル変数である $_SESSION を使うだけです。
$_SESSION は配列になっています。
この $_SESSION を使う場合は、$_SESSION を使う前に session_start() という関数を実行します。
これでセッションを使う準備が出来ました。
PHPでセッションにデータを追加する方法
先ほどもお伝えしましたが、セッションは配列になっています。
なので、
1 |
$_SESSION['name'] = "田中"; |
のように書くことでセッションに値を入れることが出来ます。
簡単ですね。
PHPでセッションからデータを取得する方法
上記の通りセッションは配列なので値の取得も配列と同じです。
1 |
$name = $_SESSION['name']; |
このように書くと以前に追加した name の値が取得できます。
ただ、この場合以前にセッションにデータを追加していなかった場合にはエラーになります。
セッションにアクセスしてデータを取得するときにはセッションにデータがあるかチェックする必要があります。
1 2 3 |
if(isset($_SESSION['name'])) { $name = $_SESSION['name']; } |
このように isset() を使ってチェックしてから取得すれば大丈夫です。
セッションを使ってカウントを表示させるだけのサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<html> <head> <meta charset="UTF-8"> <title>PHPテスト</title> <meta name="description" content="このページの概要を書く"> <link rel="stylesheet" href="css/style.css"> </head> <body> <?php session_start(); if(isset($_SESSION['count'])) { $count = $_SESSION['count']; } else { $count = 0; } echo $count; $count++; $_SESSION['count'] = $count; ?> </body> </html> |
初期表示時は 0 が表示されます。
画面を更新すると 1, 2, 3 ・・・ と増えていきます。
通常は画面を何度開いても同じカウントが表示されるような画面になってしまいますが、以前に開いたときの情報をセッションに保持しているため開く度にカウントアップしていきます。
セッションを使って何ができる?
例えばログインしていないと見れないページの作成なんかもできます。
その場合はログイン時にログインIDをセッションに保持しておいて、セッション内にログインIDが無ければログインページにリダイレクトさせるようにすればいいです。
管理システムでデータを更新する際に、選択されたデータIDをセッションに格納し、編集更新ボタンが押下されたタイミングでどのデータを更新するかを判定したりもできます。
他にもXSSチェック(クロスサイトスクリプティングチェック)が出来ます。
フィッシング詐欺というものがあります。
偽のログインページを作り、そのページでログイン情報を入力した場合にログイン情報を抜き取りそのまま正常にログインさせる詐欺です。
ログイン画面を開くときにセッションにランダムな文字列を持たせて、ユーザーIDとパスワードを入力出来るフォームに hidden 項目でそのランダムな文字列を持たせます。
ログイン処理時にはログインフォームから送信されたランダム文字列とセッション内のランダム文字列を比較し、別物だったらログイン出来ないようにするチェックです。
セッションが保持される場所
セッションが保存される場所は php.ini というファイルに定義されています。
これの session.save_path という項目です。
これは phpinfo でも確認できます。
php ファイルを一つ用意し、1行だけ下記コードを書き画面を表示します。
1 |
<?php phpinfo(); ?> |
開いた画面で session.save_path を検索すると書いてあります。
ちなみにセッションの中身はこうなってました。
1 |
count|i:26;name|s:6:"田中"; |
実験でサンプルコードを実行したときの結果ですね(笑)
countが26ってどんだけ実験したって感じですね。
セッションの期間を指定
セッションの有効期間も php.ini に記載されています。
この場合だと1000回アクセスされる度に1440秒以上経過したセッションは自動的に削除されるものです。
有効期間てこれでいいんかな?ちょっと不安ですが・・・。
PHPのフレームワークなどを使うと有効期間や保存場所をPHP内で指定することが簡単に出来ます。
まとめ
PHPでセッションにアクセスするためにはまず session_start() と書く。
セッションにはスーパーグローバル変数の $_SESSION を使ってアクセスする。
$_SESSION は配列になっており、追加や取得も配列と同様の書き方になる。
コメントを残す