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