【PHP】Sessionを活用し情報を保持する
こんにちは😊Kintarouです。
現在エンジニア転職を目指してプログラミング学習中です👨🎓
夢はフリーランスエンジニアになって働く人にとって働く事が楽しくなるシステムを作ること!
と、愛する妻と海外移住すること🗽
プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry
今回参考にさせて頂いたサイト様🙇♂️ dotinstall.com
Sessionとは
Cookieのように情報を保持する事が出来ますが、Sessionはブラウザではなくサーバー側に保存します。
※Cookieについては過去記事にまとめてます。
ryosuke-toyama.hatenablog.com
そのため検証ツールで確認出来ず、編集や削除も出来ないため、機密性が高く重要な情報を取り扱うのに利用されます。
■CookieとSessionの主な違い
項目 | Cookie | Session |
---|---|---|
値の保存場所 | ブラウザ側 | サーバー側 |
サイズ | 制限あり | 制限なし |
保存できるもの | 文字列のみ | オブジェクトなどもOK |
安全性 | 低い | 高い |
扱うもの | 簡単な設定項目 | 認証情報など |
Sessionの仕組みを使い背景色情報を保持する
Sessionは、session_start()関数を使う事で利用を開始出来ます。
また、情報は$_SESSIONという変数に配列形式で保持されます。
ブラウザ側にはPHPSESSIDという特殊な形でCookieがセットされ、値にはブラウザとサーバー側の値を紐づける識別子が表示されます。(実際の値は見えないようになっています)
■functions.php
<?php #まずここでsession_start()を行います。 session_start(); function h ($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); }
■result.php
<?php require('../app/functions.php'); $colorFromGet = filter_input(INPUT_GET, 'color') ?? 'transparent'; #session_start()により$_SESSIONという特殊な変数が使えるようになったので、colorという名前で背景情報を保持します。 #サーバー側に情報を保持する仕組みのためsetcookie()する必要がありません。 $_SESSION['color'] = $colorFromGet; include('../app/_parts/_header.php'); ?> <p><?= h($colorFromGet); ?></p> <p><a href="index.php">Go Back</a></p>
■_header.php
<?php #_header.phpで$_SESSION['color']の背景色情報を$colorに代入します。 $color = $_SESSION['color'] ?? 'transparent'; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHP Practice</title> </head> <body style="background-color: <?= h($color); ?>;">
上記のようにPHPSESSIDという特殊なCookieが生成され、Valueにはブラウザとサーバー側の値を紐づける識別子が表示されています。
このCookieが、サーバー側のColorという名前で保持されている背景色情報を引っ張ってきているイメージです。
Session情報の削除方法
Sessionの情報はunset()関数で削除します。
Session情報(color)を削除するためのreset.phpを作成してみます。
■index.php
<?php require('../app/functions.php'); include('../app/_parts/_header.php'); ?> <form action="result.php" method="get"> <label><input type="radio" name="color" value="orange">Orange</label> <label><input type="radio" name="color" value="pink">Pink</label> <label><input type="radio" name="color" value="gold">Gold</label> <button>Send</botton> <!-- reset.phpへのリンクを作成します。 --> <a href="reset.php">[reset]</a> </form>
上記のように[reset]リンクを作成し、reset.phpへジャンプします。
■reset.php
<?php require('../app/functions.php'); #unset()関数で$_SESSION['color']の値を削除します。 unset($_SESSION['color']); #header()関数は指定のURLにリダイレクトさせる事が出来ます。 header('Location: http://localhost:8080/index.php');
上記のように、$_SESSION['color']が削除されたため背景色が戻りました。
あくまで削除されるのはcolorの値であり、PHPSESSIDが削除されるわけではないので注意です。
header()関数注意点
本題ではないですがheader()関数が出てきたので注意点です。
①setcookie()同様、関数前にあらゆる出力の不可。
②LocationのLは必ず大文字にする。
③Location: の:(コロン)の後は半角スペースを必ず入れる。
④リダイレクトのURLは必ずhttpから記述する。
以上、どなたかの参考になれば幸いです😊