session.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /*
  3. Copyright (c) 2009-2013 F3::Factory/Bong Cosca, All rights reserved.
  4. This file is part of the Fat-Free Framework (http://fatfree.sf.net).
  5. THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
  6. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  7. IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  8. PURPOSE.
  9. Please see the license.txt file for more information.
  10. */
  11. //! Cache-based session handler
  12. class Session {
  13. /**
  14. * Open session
  15. * @return TRUE
  16. * @param $path string
  17. * @param $name string
  18. **/
  19. function open($path,$name) {
  20. return TRUE;
  21. }
  22. /**
  23. * Close session
  24. * @return TRUE
  25. **/
  26. function close() {
  27. return TRUE;
  28. }
  29. /**
  30. * Return session data in serialized format
  31. * @return string|FALSE
  32. * @param $id string
  33. **/
  34. function read($id) {
  35. return Cache::instance()->exists($id.'.@',$data)?$data['data']:FALSE;
  36. }
  37. /**
  38. * Write session data
  39. * @return TRUE
  40. * @param $id string
  41. * @param $data string
  42. **/
  43. function write($id,$data) {
  44. $fw=Base::instance();
  45. $headers=$fw->get('HEADERS');
  46. $jar=session_get_cookie_params();
  47. Cache::instance()->set($id.'.@',
  48. array(
  49. 'data'=>$data,
  50. 'ip'=>$fw->get('IP'),
  51. 'agent'=>isset($headers['User-Agent'])?
  52. $headers['User-Agent']:'',
  53. 'stamp'=>time()
  54. ),
  55. $jar['lifetime']
  56. );
  57. return TRUE;
  58. }
  59. /**
  60. * Destroy session
  61. * @return TRUE
  62. * @param $id string
  63. **/
  64. function destroy($id) {
  65. Cache::instance()->clear($id.'.@');
  66. return TRUE;
  67. }
  68. /**
  69. * Garbage collector
  70. * @return TRUE
  71. * @param $max int
  72. **/
  73. function cleanup($max) {
  74. Cache::instance()->reset('.@',$max);
  75. return TRUE;
  76. }
  77. /**
  78. * Return IP address associated with specified session ID
  79. * @return string|FALSE
  80. * @param $id string
  81. **/
  82. function ip($id=NULL) {
  83. return Cache::instance()->exists(($id?:session_id()).'.@',$data)?
  84. $data['ip']:FALSE;
  85. }
  86. /**
  87. * Return Unix timestamp associated with specified session ID
  88. * @return string|FALSE
  89. * @param $id string
  90. **/
  91. function stamp($id=NULL) {
  92. return Cache::instance()->exists(($id?:session_id()).'.@',$data)?
  93. $data['stamp']:FALSE;
  94. }
  95. /**
  96. * Return HTTP user agent associated with specified session ID
  97. * @return string|FALSE
  98. * @param $id string
  99. **/
  100. function agent($id=NULL) {
  101. return Cache::instance()->exists(($id?:session_id()).'.@',$data)?
  102. $data['agent']:FALSE;
  103. }
  104. /**
  105. * Instantiate class
  106. * @return object
  107. **/
  108. function __construct() {
  109. session_set_save_handler(
  110. array($this,'open'),
  111. array($this,'close'),
  112. array($this,'read'),
  113. array($this,'write'),
  114. array($this,'destroy'),
  115. array($this,'cleanup')
  116. );
  117. register_shutdown_function('session_commit');
  118. }
  119. }