Quick Search:

View

Revision:

Diff

Diff from 1666 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/osCommerce/branches/hpdl/oscommerce/includes/classes/session/database.php

Annotated File View

hpdl
1666
1 <?php
2 /*
3   $Id: $
4
5   osCommerce, Open Source E-Commerce Solutions
6   http://www.oscommerce.com
7
8   Copyright (c) 2007 osCommerce
9
10   This program is free software; you can redistribute it and/or modify
11   it under the terms of the GNU General Public License v2 (1991)
12   as published by the Free Software Foundation.
13 */
14
15 /**
16  * The osC_Session_database class stores the session data in the database
17  */
18
19   class osC_Session_database extends osC_Session {
20
21 /**
22  * Constructor, loads the database based session storage handler
23  *
24  * @param string $name The name of the session
25  * @access public
26  */
27
28     public function __construct($name = null) {
29       $this->setName($name);
30       $this->_setCookieParameters();
31
32       session_set_save_handler(array(&$this, '_custom_open'),
33                                array(&$this, '_custom_close'),
34                                array(&$this, '_custom_read'),
35                                array(&$this, '_custom_write'),
36                                array(&$this, '_custom_destroy'),
37                                array(&$this, '_custom_gc'));
38     }
39
40 /**
41  * Opens the database based session storage handler
42  *
43  * @access protected
44  */
45
46     protected function _custom_open() {
47       return true;
48     }
49
50 /**
51  * Closes the database based session storage handler
52  *
53  * @access protected
54  */
55
56     protected function _custom_close() {
57       return true;
58     }
59
60 /**
61  * Read session data from the database based session storage handler
62  *
63  * @access protected
64  */
65
66     protected function _custom_read($key) {
67       global $osC_Database;
68
69       $Qsession = $osC_Database->query('select value from :table_sessions where sesskey = :sesskey and expiry > :expiry limit 1');
70       $Qsession->bindTable(':table_sessions', TABLE_SESSIONS);
71       $Qsession->bindValue(':sesskey', $key);
72       $Qsession->bindRaw(':expiry', time());
73       $Qsession->execute();
74
75       if ( $Qsession->numberOfRows() === 1 ) {
76         $value = $Qsession->value('value');
77
78         $Qsession->freeResult();
79
80         return $value;
81       }
82
83       return false;
84     }
85
86 /**
87  * Writes session data to the database based session storage handler
88  *
89  * @access protected
90  */
91
92     protected function _custom_write($key, $value) {
93       global $osC_Database;
94
95       if ( !$SESS_LIFE = (int)ini_get('session.gc_maxlifetime') ) {
96         $SESS_LIFE = 1440;
97       }
98
99       $expiry = time() + $SESS_LIFE;
100
101       $Qsession = $osC_Database->query('select sesskey from :table_sessions where sesskey = :sesskey limit 1');
102       $Qsession->bindTable(':table_sessions', TABLE_SESSIONS);
103       $Qsession->bindValue(':sesskey', $key);
104       $Qsession->execute();
105
106       if ( $Qsession->numberOfRows() === 1 ) {
107         $Qsession = $osC_Database->query('update :table_sessions set expiry = :expiry, value = :value where sesskey = :sesskey');
108       } else {
109         $Qsession = $osC_Database->query('insert into :table_sessions values (:sesskey, :expiry, :value)');
110       }
111       $Qsession->bindTable(':table_sessions', TABLE_SESSIONS);
112       $Qsession->bindValue(':sesskey', $key);
113       $Qsession->bindValue(':expiry', $expiry);
114       $Qsession->bindValue(':value', $value);
115       $Qsession->execute();
116
117       return ( $Qsession->affectedRows() === 1 );
118     }
119
120 /**
121  * Deletes the session data from the database based session storage handler
122  *
123  * @access protected
124  */
125
126     protected function _custom_destroy($key) {
127       global $osC_Database;
128
129       $Qsession = $osC_Database->query('delete from :table_sessions where sesskey = :sesskey');
130       $Qsession->bindTable(':table_sessions', TABLE_SESSIONS);
131       $Qsession->bindValue(':sesskey', $key);
132       $Qsession->execute();
133     }
134
135 /**
136  * Garbage collector for the database based session storage handler
137  *
138  * @access protected
139  */
140
141     protected function _custom_gc($maxlifetime) {
142       global $osC_Database;
143
144       $Qsession = $osC_Database->query('delete from :table_sessions where expiry < :expiry');
145       $Qsession->bindTable(':table_sessions', TABLE_SESSIONS);
146       $Qsession->bindValue(':expiry', time());
147       $Qsession->execute();
148     }
149
150 /**
151  * Deletes the session data from the database based session storage handler
152  *
153  * @access protected
154  * @see _custom_destroy()
155  */
156
157     protected function _delete() {
158     }
159   }
160 ?>