LoginSignup
8
9

More than 5 years have passed since last update.

PHP SESSIONを取り扱う自作クラス

Last updated at Posted at 2015-12-30

セキュリティとか万全ではないのであしからず。


参照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;
}

8
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9