PHP – session利用のまとめ

PHPでセッションを使うことがあったのでまとめのメモ。

.htaccessの設定

//URLにセッションを埋め込まない
php_flag session.use_trans_sid Off
//セッションをcookieに保存
php_flag session.use_cookies On
//セッションをcookieのみの仕様
php_flag session.use_only_cookies On
//自動でセッションを開始しない
php_flag session.auto_start Off

セキュリティ強化のために基本はcookieのみ仕様可能な設定にしておく。携帯に対応する場合は下記ページのコメント欄が参考になりそう。
ke-tai.org > Blog Archive > PHPでケータイからセッションを使う場合の設定方法

PHPで基本設定

//セッションを保存するディレクトリを指定
session_save_path('/○○/tmp');
//IEの「ページの有効期限が…」を防ぐ
session_cache_limiter('none');
//キャッシュの有効期限を分単位で指定
session_cache_expire('60');
//カレントのセッション名を変更
session_name('SESSID');
//必要であればセッションクッキーパラメータを設定
$lifetime = 0;
$path = "/";
$domain = "detelu.com";
$secure = false; //セキュアな接続(HTTPSプロトコル)の場合にのみクッキーを送信
$httponly = true //JavaScriptからのアクセスを許可しない 5.2.0以上
session_set_cookie_params  ($lifetime, $path, $domain, $secure[, $httponly])
//セッションスタート
session_start();

※セッションクッキーパラメータ使ってよりセキュアに!
なぜPHPアプリにセキュリティホールが多いのか?:【スクリプトインジェクション対策03】セッションIDが利用できる範囲を制限する|gihyo.jp … 技術評論社

セッションIDを置き換える

//PHP5.1.0以上ならsession_regenerate_idを利用
session_regenerate_id(delete);
//それ以下なら下記を利用
$session_data = $_SESSION;
session_destroy();
session_id();
session_start();
$_SESSION = $session_data;

↑古いセッションが残ると意味がないので、環境によって使い分ける。

セッションを破棄する

$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
	setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();

※キャッシュの問題
IEの場合ブラウザのバックで戻る等いろいろ動作を試したがなんか動きが???
ちょっと調べるとURLに任意の文字列を与える(mktime()等)ようにしたらいいような感じのことが書かれていたので試したところ、ようやくまともに動いた!
けどもうちょっとスマートな方法はないのだろうか?もうちょっと設定を変えつつ試してみよう。

※2008-02-08 理論値を「”」で括ってしまってました…。「ぺ」様、ありがとうございます、修正しました。

  • Category : PHP
  • Tags :