Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
session_start() / $_SESSION / session_destroy()対応: PHP 4(2000)
セッションを開始し、サーバー側でユーザーごとのデータを保持します。ログイン状態の管理やショッピングカートなど、ページをまたいでデータを保持したい場合に使用されます。
構文
// セッションを開始します。 session_start($options); // セッション変数に値を保存・取得します。 $_SESSION['key'] = $value; // セッションを破棄します。 session_destroy(); // セッションIDを再生成します。 session_regenerate_id($delete_old_session); // セッションIDを取得します。 session_id($id); // セッションCookieのパラメータを設定します。 session_set_cookie_params($options);
関数一覧
| 関数 | 概要 |
|---|---|
| session_start($options) | セッションを開始します。既にセッションが開始されている場合は何もしません。引数で『cookie_lifetime』『cookie_secure』などのオプションを指定できます。 |
| $_SESSION | セッション変数を格納するスーパーグローバル配列です。この配列に値を保存すると、同じユーザーの次のリクエストでもデータが利用できます。 |
| session_destroy() | セッションに関連付けられたデータをすべて破棄します。セッション変数は即座には消えないため、併せて『$_SESSION = []』で空にしてください。 |
| session_regenerate_id($delete_old) | セッションIDを新しく生成し直します。引数に『true』を指定すると古いセッションファイルも削除されます。 |
| session_id($id) | 引数なしで現在のセッションIDを返します。引数を指定するとセッションIDを設定できます。 |
| session_set_cookie_params($options) | セッションCookieのパラメータを設定します。『session_start()』の前に呼び出す必要があります。 |
サンプルコード
<?php
// セッションを開始します。すべてのページの先頭で呼び出してください。
session_start();
// セッション変数にデータを保存します。
$_SESSION['username'] = '山田太郎';
$_SESSION['login_time'] = time();
echo $_SESSION['username']; // 『山田太郎』と出力されます。
// セッション変数の存在を確認します。
if (isset($_SESSION['username'])) {
echo "ログイン中: " . $_SESSION['username'];
}
// セッションIDを確認します。
echo session_id(); // 『abc123def456...』のようなIDが出力されます。
// セキュリティ対策としてセッションCookieを適切に設定します。
session_set_cookie_params([
'lifetime' => 0, // ブラウザを閉じるまで有効です。
'path' => '/',
'domain' => '',
'secure' => true, // HTTPS接続でのみCookieを送信します。
'httponly' => true, // JavaScriptからCookieにアクセスできなくなります。
'samesite' => 'Lax' // CSRF対策としてSameSite属性を設定します。
]);
session_start();
// ログイン成功時にセッションIDを再生成します。
session_regenerate_id(true); // 古いセッションファイルも削除されます。
$_SESSION['user_id'] = 1;
// ログアウト処理の完全な実装です。
$_SESSION = []; // セッション変数をすべて空にします。
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(
session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
); // セッションCookieを削除します。
}
session_destroy(); // セッションデータを破棄します。
概要
『session_start()』はPHPのセッション管理を開始する関数で、サーバー側にユーザーごとのデータ領域を確保します。セッション固定攻撃を防ぐため、ログイン成功時には必ず『session_regenerate_id(true)』でセッションIDを再生成してください。
セッションCookieには『secure』『httponly』『samesite』属性を設定することが重要です。『httponly』を有効にするとJavaScriptからCookieにアクセスできなくなり、XSS攻撃によるセッションハイジャックを防止できます。
ログアウト時は、セッション変数の消去・セッションCookieの削除・セッションデータの破棄の3つをすべて行ってください。『session_destroy()』だけでは『$_SESSION』の中身は残り続けるため不十分です。Cookieの操作については『setcookie()』も参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。