用途
サーバー側に、サイトを訪れたユーザの情報を個別に保存しておいて、情報をもとにさまざまなページで処理をしたい時に使う。
使用方法
一連の流れ
1.セッションに保存する
<?php
session_start(); // セッションをスタート
$_SESSION['name'] = 'hoge'; // セッションのnameに情報を保存
$name = $_SESSION['name']; // セッションの情報を$nameに代入
var_dump($name); // "hoge"が表示される
?>
※セッションは連想配列で保存される。
2.セッションに保存したものを別ファイルで使用する
<?php
session_start(); // セッションをスタート
$name = $_SESSION['name']; // ファイル①でセッションで保存してあるnameを取得して、$nameに代入
var_dump($name); // "hoge" が表示される
?>
3.セッションに保存したものを削除する
// 削除するセッションを指定する場合
<?php
session_start(); // セッションをスタート
$_SESSION['name'] = 'tanaka'; // セッションのnameに情報を保存
$_SESSION['number'] = 5; // セッションのnumberに情報を保存
unset($_SESSION['name']); // セッションのnameの値を削除する
var_dump($_SESSION); // array(1) { ["number"]=> int(5) } が表示される
?>
// 全てのセッションを削除する場合
<?php
// 削除するセッションを指定する場合
session_start(); // セッションをスタート
$_SESSION['name'] = 'tanaka'; // セッションのnameに情報を保存
$_SESSION['number'] = 5; // セッションのnumberに情報を保存
$_SESSION = array(); // セッションを空配列にする
var_dump($_SESSION); // array(0) { } が表示される
?>
4. セッションを終了・破棄する
// セッションを破棄
<?php
session_start();
$_SESSION['name'] = 'hoge'; // セッションのnameに情報を保存
session_destory(); // セッションを破棄する
?>
// セッションを保存しないで終了
<?php
session_start();
$_SESSION['name'] = 'hoge'; // セッションのnameに情報を保存
session_abort(); // セッションを保存しないで終了する
?>
// セッションを保存して終了
<?php
session_start();
$_SESSION['name'] = 'hoge'; // セッションのnameに情報を保存
session_write_close(); // セッションを保存して終了する
?>
※コメントでご指摘をいただき修正しました。
その他
セッションが保存される有効期限を設定する
<?php
session_start();
ini_set('session.gc_maxlifetime', 100); // セッションの有効期限を100秒に設定する
?>
ini_set
で有効期限を設定する。
第1引数には、有効期限の設定の session.gc_maxlifetime
を入力する。
第2引数には、設定したい有効期限を「秒数」で指定する。
※デフォルトではプラウザが閉じるまで有効になっている。
注意
正確にいうと、 session.gc_maxlifetime
はセッションの有効期間そのものを設定する項目ではない。
session.gc_maxlifetime
はセッションを削除する「セッション破棄処理(ガベージコレクション(gc))」が起動してからの秒数を設定している。
「セッション破棄処理(ガベージコレクション(gc))」が起動する確率は下記で設定されている。
session.gc_probability / session.gc_divisor
※ デフォルトは1/100(1%)
なのでアクセス頻度が低いと「セッション破棄処理(ガベージコレクション(gc))」を起動する判定回数が少なくなる。
→ 起動確率が低くなり、長い間セッションが残る場合もある。
※コメントでご指摘をいただき修正しました。
$ grep "session.gc_probability" /etc/php.ini
$ grep "session.gc_divisor" /etc/php.ini