35 ini_set(
'session.use_trans_sid', 0);
36 ini_set(
'session.serialize_handler',
'php');
37 ini_set(
'session.use_cookies', 1);
38 ini_set(
'session.name',
Config::getVar(
'general',
'session_cookie_name'));
39 ini_set(
'session.cookie_lifetime', 0);
40 ini_set(
'session.cookie_path',
Config::getVar(
'general',
'session_cookie_path', $request->getBasePath() .
'/'));
41 ini_set(
'session.cookie_domain', $request->getServerHost(
null,
false));
42 ini_set(
'session.gc_probability', 1);
43 ini_set(
'session.gc_maxlifetime', 60 * 60);
44 ini_set(
'session.auto_start', 1);
45 ini_set(
'session.cache_limiter',
'none');
47 session_set_save_handler(
49 array($this,
'close'),
51 array($this,
'write'),
52 array($this,
'destroy'),
59 $sessionId = session_id();
61 $ip = $request->getRemoteAddr();
62 $userAgent = $request->getUserAgent();
66 if (isset($this->userSession) && $this->userSession->getDomain() && $this->userSession->getDomain() != $request->getServerHost(
null,
false)) {
68 if (strtolower(substr($request->getServerHost(
null,
false), -1 - strlen($this->userSession->getDomain()))) ==
'.'.strtolower($this->userSession->getDomain())) {
69 ini_set(
'session.cookie_domain', $this->userSession->getDomain());
73 if (!isset($this->userSession) || (
Config::getVar(
'security',
'session_check_ip') && $this->userSession->getIpAddress() != $ip) || $this->userSession->getUserAgent() != substr($userAgent, 0, 255)) {
74 if (isset($this->userSession)) {
80 $this->userSession = $this->sessionDao->newDataObject();
81 $this->userSession->setId($sessionId);
82 $this->userSession->setIpAddress($ip);
83 $this->userSession->setUserAgent($userAgent);
84 $this->userSession->setSecondsCreated($now);
85 $this->userSession->setSecondsLastUsed($now);
86 $this->userSession->setDomain(ini_get(
'session.cookie_domain'));
87 $this->userSession->setSessionData(
'');
89 $this->sessionDao->insertObject($this->userSession);
92 if ($this->userSession->getRemember()) {
97 $this->userSession->setRemember(0);
103 $this->userSession->setSecondsLastUsed($now);
111 register_shutdown_function(
'session_write_close');
122 if (is_null($instance)) {
126 assert(!is_null($request));
166 function read($sessionId) {
167 if (!isset($this->userSession)) {
168 $this->userSession = $this->sessionDao->getSession($sessionId);
169 if (isset($this->userSession)) {
170 $data = $this->userSession->getSessionData();
173 return isset($data) ? $data :
'';
182 function write($sessionId, $data) {
183 if (isset($this->userSession)) {
184 $this->userSession->setSessionData($data);
185 return $this->sessionDao->updateObject($this->userSession);
198 return $this->sessionDao->deleteById($sessionId);
207 function gc($maxlifetime) {
208 return $this->sessionDao->deleteByLastUsed(time() - 86400,
Config::getVar(
'general',
'session_lifetime') <= 0 ? 0 : time() -
Config::getVar(
'general',
'session_lifetime') * 86400);
218 $domain = ini_get(
'session.cookie_domain');
220 if (strpos($domain,
'.') ===
false) $domain =
false;
224 setcookie(session_name(),
"", 0, ini_get(
'session.cookie_path'),
false);
229 ($sessionId ===
false) ? session_id() : $sessionId,
231 ini_get(
'session.cookie_path'),
245 $currentSessionId = session_id();
247 if (session_regenerate_id() && isset($this->userSession)) {
249 $this->sessionDao->deleteById($currentSessionId);
250 $this->userSession->setId(session_id());
251 $this->sessionDao->insertObject($this->userSession);