セキュリティとか万全ではないのであしからず。
参照URL
セッションの有効期間とか設定とか挙動とかを調べました
http://pentan.info/php/session_gc.html
セッション実行時設定
http://php.net/manual/ja/session.configuration.php#ini.session.gc-divisor
session idについて
http://php.net/manual/ja/function.session-regenerate-id.php
sessionハイジャック
http://sawara.me/php/2348/
上記を参考にセッション保存、取り出し、検索(?)をクラス化してみました。
SessionDb.php
<?php
class SessionDb{
private $SesId;
function __construct(){
//ini_set('session.gc_maxlifetime', 1800); //session消去の時間/秒
//ini_set('session.use_trans_sid',0); //URLにセッションIDを付加しない(デフォルト:0)
//ini_set('session.use_cookies',1); //セッションIDの保存にcookieを使用する(デフォルト:1)
//ini_set('session.use_only_cookies',1); //セッションIDの保存にcookieのみを使用(デフォルト:1)
//ini_set('session.name', 'korehajibunde'); //一般的なセッション名を避ける場合
//ini_set('session.cookie_secure',1); //HTTPS以外でのcookieを送信しない(デフォルト:0)
ini_set('session.use_strict_mode',1); //セッションアダプション対策(デフォルト:0)
session_start();
session_regenerate_id(true);
$this->SesId = session_id();
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
}
function ck_ses(){
if($this->SesId==session_id()):
if($_SESSION['ipaddress'] == $_SERVER['REMOTE_ADDR']){ return true; }
endif;
}
function exist_ck($key){
if(@$_SESSION[$key]==""):
return true;
endif;
}
function set($key,$value){
if($this->ck_ses())
$_SESSION[$key]=$value;
}
function get($key){
if($this->ck_ses())
return $_SESSION[$key];
}
function del(){
session_destroy();
session_unset();
//setcookie(session_name(), '', time() - 3600, "/");
}
function find($keys,$find){
if($this->ck_ses())
$data = $_SESSION[$keys];
foreach ($data as $key => $value) {
if($find==$value) return true;
}
}
function __destruct(){
}
}
//使い方の例
$sdb = new SessionDb();
echo '<meta charset="utf-8">';
$sdb->set('name',array('tarou','tuyosi','kenta'));
foreach ($sdb->get('name') as $key => $value) {
echo $value."<br>";
}
if($sdb->find('name','kenta')) echo "<br>kenta is exist";
$sdb->del();
?>
ウェブで実行確認
paiza.ioへのコードリンク
例えば開発中とかにデータベースを使わずにサクサクする時にたまに使ったりします。
TestDb.php
class TestDb extends SessionDb{
public $data;
function __construct(){
if($this->exist_ck('TestDb')):
$this->start_ob();
endif;
$this->data = $this->get('TestDb');
}
function start_ob(){
$this->set('TestDb',array('yamada'=>'tarou','kinosita'=>'mari'));
}
}
$testdb = new TestDb();
foreach($testdb->get('TestDb') as $key=>$value){
echo PHP_EOL.$key.$value;
}