【PHP】sessionを完全に理解した(仮)


sessionを完全に理解した(仮)

これまでsessionを理解せずにRubyやら進めてきたが、
今回理解することに成功した。はず。

sessionを使うと何ができるのか。
またどのような際に使うと役立つのか備忘録として書いていきたい。

sessionとは?

SESSIONとは、サーバ側で保有する、一時的なデータ保存の仕組みのこと。

ログイン情報など、ユーザーと紐づく情報をサーバー側に一定期間保存しておくことができる。
サーバ側にデータを保存するため、Cookieよりもセキュリティ面で優れている。

SESSIONが使われる例として一番代表的なのはログイン機能。

ユーザIDやパスワード情報をサーバ側にSESSIONとして保存しておくことで、
複数ページにわたるwebサービスでも同じ値を使い回すことができる。

sessionが必要な理由

HTTPプロトコルでは、通常、情報の保持ができないため
sessionを用いて、一時的に情報を保持する必要があるとされている。

SESSIONとしてデータがサーバに存在していれば、
サーバ上のSESSIONデータから情報を取得するだけで、複数画面に渡るwebサービスでも、簡単かつ安全にデータを使い回すことが可能。

Cookieとは

Cookieとは、ブラウザ側で保有する、一時的なデータ保存の仕組みのことだ。

よくオンラインショッピングなどで、一定期間の間、ログイン中のユーザのショッピングカートの中身が保存された状態になっているのは、Cookieが働いてくれているためである。

sessionの使い方

session_start();

$_SESSION['キー名'] = バリュー;

session_start(); にてsessionをスタートさせる。
セッションを使うプログラムソースなら必ず書く。

そして、スーパグローバル変数「$_SESSION」にキーと値を代入をする。

sessionを用いたFormを使った例

// test.php

<?php

session_start();

// POST を受け取る変数を初期化
$blood = '';

// セレクトボックスの値を格納する配列
$bloodList = array(
  "A",
  "B",
  "O",
  "AB"
);

// 戻ってきた場合
if(isset($_SESSION['blood'])){
  $blood = $_SESSION['blood'];
}
?>


<body>
  <form method="POST" action="test1.php">
    <select name="blood">
      <?php
        foreach($bloodList as $value){
          if($value === $blood){
            // ① POST データが存在する場合はこちらの分岐に入る
            echo "<option value='$value' selected>".$value."</option>";
          }else{
            // ② POST データが存在しない場合はこちらの分岐に入る
            echo "<option value='$value'>".$value."</option>";
          }
        }
      ?>
    </select>
    <input type="submit" value="送信する"> 
  </form>
</body>
// test1.php

<?php

session_start();

$_SESSION['blood'] = $_POST['blood'];
// POST データを代入する
$blood = $_POST['blood'];

?>

<body>
  <?php echo $blood ?>
  <a href="test.php">戻る</a>
</body>

これで戻るボタンを押して戻ったあともsessionが効き、
入力した血液型が保持されている。