PageRenderTime 51ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/includes/functions/sessions.php

https://github.com/ZenMagick/zc-base
PHP | 211 lines | 152 code | 29 blank | 30 comment | 34 complexity | 4b441a764005561844e5d02b0afba3b8 MD5 | raw file
  1. <?php
  2. /**
  3. * functions/sessions.php
  4. * Session functions
  5. *
  6. * @package functions
  7. * @copyright Copyright 2003-2010 Zen Cart Development Team
  8. * @copyright Portions Copyright 2003 osCommerce
  9. * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
  10. * @version $Id: sessions.php 16745 2010-06-17 12:02:17Z wilt $
  11. */
  12. if (!defined('IS_ADMIN_FLAG')) {
  13. die('Illegal Access');
  14. }
  15. if (STORE_SESSIONS == 'db') {
  16. if (defined('DIR_WS_ADMIN')) {
  17. if (!$SESS_LIFE = (SESSION_TIMEOUT_ADMIN + 900)) {
  18. $SESS_LIFE = (SESSION_TIMEOUT_ADMIN + 900);
  19. }
  20. } else {
  21. if (!$SESS_LIFE = get_cfg_var('session.gc_maxlifetime')) {
  22. $SESS_LIFE = 1440;
  23. }
  24. }
  25. function _sess_open($save_path, $session_name) {
  26. return true;
  27. }
  28. function _sess_close() {
  29. return true;
  30. }
  31. function _sess_read($key) {
  32. global $db;
  33. $qid = "select value
  34. from " . TABLE_SESSIONS . "
  35. where sesskey = '" . zen_db_input($key) . "'
  36. and expiry > '" . time() . "'";
  37. $value = $db->Execute($qid);
  38. if (isset($value->fields['value']) && $value->fields['value']) {
  39. $value->fields['value'] = base64_decode($value->fields['value']);
  40. return $value->fields['value'];
  41. }
  42. return ("");
  43. }
  44. function _sess_write($key, $val) {
  45. global $db;
  46. if (!is_object($db)) {
  47. //PHP 5.2.0 bug workaround ...
  48. $db = new queryFactory();
  49. $db->connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE, USE_PCONNECT, false);
  50. }
  51. $val = base64_encode($val);
  52. global $SESS_LIFE;
  53. $expiry = time() + $SESS_LIFE;
  54. $qid = "select count(*) as total
  55. from " . TABLE_SESSIONS . "
  56. where sesskey = '" . zen_db_input($key) . "'";
  57. $total = $db->Execute($qid);
  58. if ($total->fields['total'] > 0) {
  59. $sql = "update " . TABLE_SESSIONS . "
  60. set expiry = '" . zen_db_input($expiry) . "', value = '" . zen_db_input($val) . "'
  61. where sesskey = '" . zen_db_input($key) . "'";
  62. $result = $db->Execute($sql);
  63. } else {
  64. $sql = "insert into " . TABLE_SESSIONS . "
  65. values ('" . zen_db_input($key) . "', '" . zen_db_input($expiry) . "', '" .
  66. zen_db_input($val) . "')";
  67. $result = $db->Execute($sql);
  68. }
  69. return (!empty($result) && !empty($result->resource));
  70. }
  71. function _sess_destroy($key) {
  72. global $db;
  73. $sql = "delete from " . TABLE_SESSIONS . " where sesskey = '" . zen_db_input($key) . "'";
  74. return $db->Execute($sql);
  75. }
  76. function _sess_gc($maxlifetime) {
  77. global $db;
  78. $sql = "delete from " . TABLE_SESSIONS . " where expiry < " . time();
  79. $db->Execute($sql);
  80. return true;
  81. }
  82. session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
  83. }
  84. function zen_session_start() {
  85. @ini_set('session.gc_probability', 1);
  86. @ini_set('session.gc_divisor', 2);
  87. if (defined('DIR_WS_ADMIN')) {
  88. @ini_set('session.gc_maxlifetime', (SESSION_TIMEOUT_ADMIN < 900 ? (SESSION_TIMEOUT_ADMIN + 900) : SESSION_TIMEOUT_ADMIN));
  89. }
  90. if (preg_replace('/[a-zA-Z0-9]/', '', session_id()) != '')
  91. {
  92. zen_session_id(md5(uniqid(rand(), true)));
  93. }
  94. $temp = session_start();
  95. if (!isset($_SESSION['securityToken'])) {
  96. $_SESSION['securityToken'] = md5(uniqid(rand(), true));
  97. }
  98. return $temp;
  99. }
  100. function zen_session_register($variable) {
  101. die('This function has been deprecated. Please use Register Globals Off compatible code');
  102. }
  103. function zen_session_is_registered($variable) {
  104. die('This function has been deprecated. Please use Register Globals Off compatible code');
  105. }
  106. function zen_session_unregister($variable) {
  107. die('This function has been deprecated. Please use Register Globals Off compatible code');
  108. }
  109. function zen_session_id($sessid = '') {
  110. if (!empty($sessid)) {
  111. $tempSessid = $sessid;
  112. if (preg_replace('/[a-zA-Z0-9]/', '', $tempSessid) != '')
  113. {
  114. $sessid = md5(uniqid(rand(), true));
  115. }
  116. return session_id($sessid);
  117. } else {
  118. return session_id();
  119. }
  120. }
  121. function zen_session_name($name = '') {
  122. if (!empty($name)) {
  123. $tempName = $name;
  124. if (preg_replace('/[a-zA-Z0-9]/', '', $tempName) == '') return session_name($name);
  125. return FALSE;
  126. } else {
  127. return session_name();
  128. }
  129. }
  130. function zen_session_close() {
  131. if (function_exists('session_close')) {
  132. return session_close();
  133. }
  134. }
  135. function zen_session_destroy() {
  136. return session_destroy();
  137. }
  138. function zen_session_save_path($path = '') {
  139. if (!empty($path)) {
  140. return session_save_path($path);
  141. } else {
  142. return session_save_path();
  143. }
  144. }
  145. function zen_session_recreate() {
  146. global $http_domain, $https_domain, $current_domain;
  147. if ($http_domain == $https_domain) {
  148. $saveSession = $_SESSION;
  149. $oldSessID = session_id();
  150. session_regenerate_id();
  151. $newSessID = session_id();
  152. session_id($oldSessID);
  153. session_id($newSessID);
  154. if (STORE_SESSIONS == 'db') {
  155. session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
  156. }
  157. // session_start();
  158. $_SESSION = $saveSession;
  159. if (IS_ADMIN_FLAG !== true) {
  160. whos_online_session_recreate($oldSessID, $newSessID);
  161. }
  162. } else {
  163. /*
  164. $saveSession = $_SESSION;
  165. $oldSessID = session_id();
  166. session_regenerate_id();
  167. $newSessID = session_id();
  168. session_id($oldSessID);
  169. session_destroy();
  170. session_id($newSessID);
  171. session_set_cookie_params(0, '/', (zen_not_null($http_domain) ? $http_domain : ''));
  172. session_id($newSessID);
  173. if (STORE_SESSIONS == 'db') {
  174. session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
  175. }
  176. session_start();
  177. session_set_cookie_params(0, '/', (zen_not_null($current_domain) ? $current_domain : ''));
  178. session_start();
  179. $_SESSION = $saveSession;
  180. */
  181. }
  182. }