概要
PHP 学習メモ。セッションについて。
内容
- セッション
1. セッション
セッションとは:
session_start()
により現在のセッションを開始し、現在のセッション ID に関するセッション変数 $_SESSION
にアクセスできるようになる。
次のコードでこれを確認する。
page1.php
<?php session_start(); echo 'Welcome to page #1<br>'; // セッション ID を表示 var_dump(session_id()); echo '<br>---<br>'; // セッション変数を表示 var_dump($_SESSION); echo '<br>---<br>'; $_SESSION['message'] = '#1 メッセージ'; echo '<a href="page2.php">page 2</a>'; ?>
page2.php
<?php session_start(); echo 'Welcome to page #2<br>'; // セッション ID を表示 var_dump(session_id()); echo '<br>---<br>'; // セッション変数を表示 var_dump($_SESSION); echo '<br>---<br>'; $_SESSION['message'] = '#2 メッセージ'; echo '<a href="page1.php">page 1</a>'; ?>
これらを使って次の 2 通りの検証を行う:
- session_start() を実行する場合:上記コードそのままで動作確認
- session_start() を実行しない場合:
page2.php
のsession_start()
をコメントアウトして動作確認
session_start() を実行する場合
- No.1
page1.php
初回アクセス時
現在のセッション ID が表示される(画面 2 行目)。初回アクセス時は、このセッション ID に関するセッション変数は空になっている。
- No.2
page1.php
のリンクからpage2.php
にアクセス
page1.php
初回アクセス時と同じセッション ID を保持している。これは session_start()
によって同じセッションが開始されたためである。セッション変数には「#1 メッセージ」が格納されている。これは page1.php
初回アクセス時にセッション変数に「#1 メッセージ」が追加され、同じセッション ID を参照しているためである。
- No.3
page2.php
のリンクからpage1.php
にアクセス
page1.php
初回アクセス時と同じセッション ID を保持している。session_start()
によって同じセッションが開始されていることがうかがえる。セッション変数には「#2 メッセージ」が格納されている。page2.php
アクセス時にセッション変数に「#2 メッセージ」が追加され、同じセッション ID を参照していることがうかがえる。
session_start() を実行しない場合
次に page2.php
の session_start()
をコメントアウトして同じことを実行する。
<?php // session_start(); echo 'Welcome to page #2<br>';
- 上記 No.1 に該当する手順
同様の結果だった。
- 上記 No.2 に該当する手順
セッション ID は空文字で出力された。これは次のドキュメントに書いてある。
session_id() は現在のセッションのセッション ID を返します。 現在のセッションが存在しない (現在のセッション ID が存在しない) 場合は空文字列 ("") を返します。
セッション変数は NULL
になる。これは次のドキュメントを探したが見つけられなかった。
- 上記 No.3 に該当する手順
セッション ID は保持されている。セッション変数は「#1 メッセージ」となったままであり、手順 No.2 でセッション変数が上書きされなかったことがわかる。