今回はphpでsessionに関する内容を紹介します。
sessionについて
session開始
session_start();
session値設定
$_SESSION[‘name’]=’test’;
$_SESSION[‘age’]=20;
$_SESSION[‘age’]=20;
sessionのID取得
session_id();
php.iniにsessionに関する設定
;session情報の保存方法(デフォルトはファイルに保存する)
session.save_handler = files
;ファイルの保存パス
session.save_path = /tmp
;デフォルトはsession無効
session.auto_start = 0
;sessionの有効期限:1440秒
session.gc_maxlifetime = 1440
session.name = PHPSESSID
;cookie有効期限(0の場合、ブラウザを閉じらない、ずっと有効)
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.save_handler = files
;ファイルの保存パス
session.save_path = /tmp
;デフォルトはsession無効
session.auto_start = 0
;sessionの有効期限:1440秒
session.gc_maxlifetime = 1440
session.name = PHPSESSID
;cookie有効期限(0の場合、ブラウザを閉じらない、ずっと有効)
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
セッションク破棄
セッションに登録されたデータを全て破棄する
session_destroy();
セッションデータの GC
PHPは、デフォルトで確率ベースのセッション GC を行います。
php.iniに以下の設定値により、1000回のアクセスの中に1回のGCを実施します。
GC対象は「session.gc_maxlifetime = 1440」を超えった対象となります。
GC対象は「session.gc_maxlifetime = 1440」を超えった対象となります。
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_divisor = 1000
session.gc_probability を 0 に設定して、 確率ベースのGCを無効にする。cronで定期的に GC を実行することをお勧めします。
ブラウザcookie無効設定の対応
sessionはデフォルトでcookieを利用していますが、ブラウザではcookie無効を設定すると、利用できない。
以下の設定により、get,postにsessionidを自動に設定する。
session.use_only_cookies = 0 ; sessionはcookie以外で利用できる(デフォルト:1)
session.use_trans_sid = 1 :session_idはcookie以外の方法で(デフォルト:0)
session.use_trans_sid = 1 :session_idはcookie以外の方法で(デフォルト:0)
session情報をテーブルに保存
session情報はデフォルトでファイルに保存しますが、ファイルをアクセスするとき、時間がかかります。
session情報をDBに保存する変更を紹介します。
session情報をDBに保存する変更を紹介します。
sessionテーブル作成
create table session (
session_id varchar(50) primary key,
session_value text
session_time int unsigned not null
)engine=innodb charset=utf8;
session_id varchar(50) primary key,
session_value text
session_time int unsigned not null
)engine=innodb charset=utf8;
create table session (
session_id varchar(50) primary key,
session_value varchar(500),
session_time int unsigned not null
)engine=memory charset=utf8;
–memoryの場合、textを利用できない。
session_id varchar(50) primary key,
session_value varchar(500),
session_time int unsigned not null
)engine=memory charset=utf8;
–memoryの場合、textを利用できない。
session情報をテーブルに登録
function open() {
global $link;
$link = mysqli_connect(‘host’,’username’,’password’,’dbname’,’port’);
mysqli_set_charset($link,’utf8′);
return true;
}
function close(){
return true;
}
function read(string $sessionId){
global $link;
$sql=”select session_value from session where session_id='”.$sessionId.”‘”;
$rs=mysqli_query($link,$sql);
$rows=mysqli_fetch_row($rs);
return (string)$rows[0];
}
function write(string $sessionId, string $data){
global $link;
$sql=”insert into session values(‘{$sessionId}’,'{$data}’,unix_timestamp())”;
return mysqli_query($link,$sql);
}
function destroy(string $sessionId){
global $link;
echo “destroy”;
return true;
}
function gc(int $lifetime){
global $link;
echo “gc”;
return true;
}
function create_sid() {
echo “create_sid”;
return uniqid(”, true);
}
function validate_sid(string $key){
echo “validate_sid”;
return true;
}
function update_timestamp(string $key, string $val){
global $link;
echo “update_timestamp”;
return true;
}
session_set_save_handler(‘open’, ‘close’,’read’, ‘write’, ‘destroy’, ‘gc’, ‘create_sid’, ‘validate_sid’, ‘update_timestamp’);
session_start();
$_SESSION[‘name’]=’ggosss’;
echo $_SESSION[‘name’];
global $link;
$link = mysqli_connect(‘host’,’username’,’password’,’dbname’,’port’);
mysqli_set_charset($link,’utf8′);
return true;
}
function close(){
return true;
}
function read(string $sessionId){
global $link;
$sql=”select session_value from session where session_id='”.$sessionId.”‘”;
$rs=mysqli_query($link,$sql);
$rows=mysqli_fetch_row($rs);
return (string)$rows[0];
}
function write(string $sessionId, string $data){
global $link;
$sql=”insert into session values(‘{$sessionId}’,'{$data}’,unix_timestamp())”;
return mysqli_query($link,$sql);
}
function destroy(string $sessionId){
global $link;
echo “destroy”;
return true;
}
function gc(int $lifetime){
global $link;
echo “gc”;
return true;
}
function create_sid() {
echo “create_sid”;
return uniqid(”, true);
}
function validate_sid(string $key){
echo “validate_sid”;
return true;
}
function update_timestamp(string $key, string $val){
global $link;
echo “update_timestamp”;
return true;
}
session_set_save_handler(‘open’, ‘close’,’read’, ‘write’, ‘destroy’, ‘gc’, ‘create_sid’, ‘validate_sid’, ‘update_timestamp’);
session_start();
$_SESSION[‘name’]=’ggosss’;
echo $_SESSION[‘name’];