/src/org/rhaco/net/Session.php

https://github.com/tokushima/rhaco3 · PHP · 145 lines · 75 code · 4 blank · 66 comment · 6 complexity · e3f7eae41f018ea238d9a496f1c3f41e MD5 · raw file

  1. <?php
  2. namespace org\rhaco\net;
  3. /**
  4. * セッションを操作する
  5. * @see http://jp2.php.net/manual/ja/function.session-set-save-handler.php
  6. * @author tokushima
  7. * @conf string $session_name セッション名
  8. * @conf string $session_limiter キャッシュリミッタ nocache,private,private_no_expire,public
  9. * @conf integer $session_expire キャッシュの有効期限(sec)
  10. */
  11. class Session extends \org\rhaco\Object{
  12. private $ses_n;
  13. /**
  14. * セッションを開始する
  15. * @param string $name
  16. * @return $this
  17. */
  18. protected function __new__($name='sess'){
  19. $this->ses_n = $name;
  20. if('' === session_id()){
  21. $session_name = \org\rhaco\Conf::get('session_name','SID');
  22. if(!ctype_alpha($session_name)){
  23. throw new \InvalidArgumentException('session name is is not a alpha value');
  24. }
  25. session_cache_limiter(\org\rhaco\Conf::get('session_limiter','nocache'));
  26. session_cache_expire((int)(\org\rhaco\Conf::get('session_expire',10800)/60));
  27. session_name();
  28. if(static::has_module('session_read')){
  29. ini_set('session.save_handler','user');
  30. session_set_save_handler(
  31. array($this,'open'),
  32. array($this,'close'),
  33. array($this,'read'),
  34. array($this,'write'),
  35. array($this,'destroy'),
  36. array($this,'gc')
  37. );
  38. if(isset($this->vars[$session_name])){
  39. session_regenerate_id(true);
  40. }
  41. }
  42. session_start();
  43. register_shutdown_function(function(){
  44. if('' != session_id()){
  45. session_write_close();
  46. }
  47. });
  48. }
  49. }
  50. /**
  51. * セッションの設定
  52. * @param string $name
  53. * @param mixed $value
  54. */
  55. public function vars($key,$value){
  56. $_SESSION[$this->ses_n][$key] = $value;
  57. }
  58. /**
  59. * セッションの取得
  60. * @param string $n
  61. * @param mixed $d 未定義の場合の値
  62. * @return mixed
  63. */
  64. public function in_vars($n,$d=null){
  65. return isset($_SESSION[$this->ses_n][$n]) ? $_SESSION[$this->ses_n][$n] : $d;
  66. }
  67. /**
  68. * すべてのセッションの取得
  69. */
  70. public function ar_vars(){
  71. return isset($_SESSION[$this->ses_n]) ? $_SESSION[$this->ses_n] : array();
  72. }
  73. /**
  74. * キーが存在するか
  75. * @param string $n
  76. * @return boolean
  77. */
  78. public function is_vars($n){
  79. return isset($_SESSION[$this->ses_n]) ? array_key_exists($n,$_SESSION[$this->ses_n]) : false;
  80. }
  81. /**
  82. * セッションを削除
  83. */
  84. public function rm_vars(){
  85. foreach(((func_num_args() === 0) ? array_keys($_SESSION[$this->ses_n]) : func_get_args()) as $n) unset($_SESSION[$this->ses_n][$n]);
  86. }
  87. final public function open($path,$name){
  88. /**
  89. * セッションを開くときに実行される
  90. * @param string $path
  91. * @param string $name
  92. * @return boolean
  93. */
  94. $bool = static::module('session_open',$path,$name);
  95. return (!is_bool($bool)) ? true : $bool;
  96. }
  97. final public function close(){
  98. /**
  99. * writeが実行された後で実行される
  100. * @return boolean
  101. */
  102. $bool = static::module('session_close');
  103. return (!is_bool($bool)) ? true : $bool;
  104. }
  105. final public function read($id){
  106. /**
  107. * セッションが開始したとき実行されます
  108. * @param string $id
  109. * @return mixed
  110. */
  111. return static::module('session_read',$id);
  112. }
  113. final public function write($id,$sess_data){
  114. /**
  115. * セッションの保存や終了が必要となったときに実行されます
  116. * @param string $id
  117. * @param mixed $sess_data
  118. * @return boolean
  119. */
  120. $bool = static::module('session_write',$id,$sess_data);
  121. return (!is_bool($bool)) ? true : $bool;
  122. }
  123. final public function destroy($id){
  124. /**
  125. * セッションを破棄した場合に実行される
  126. * @param string $id
  127. * @return boolean
  128. */
  129. $bool = static::module('session_destroy',$id);
  130. return (!is_bool($bool)) ? true : $bool;
  131. }
  132. final public function gc($maxlifetime){
  133. /**
  134. * ガベージコレクタ
  135. * @param integer $maxlifetime session.gc_maxlifetime
  136. * @return boolean
  137. */
  138. $bool = static::module('session_gc',$maxlifetime);
  139. return (!is_bool($bool)) ? true : $bool;
  140. }
  141. }