DefaultSession.php
1 <?php
2 /**
3  * wCMF - wemove Content Management Framework
4  * Copyright (C) 2005-2015 wemove digital solutions GmbH
5  *
6  * Licensed under the terms of the MIT License.
7  *
8  * See the LICENSE file distributed with this work for
9  * additional information.
10  */
11 namespace wcmf\lib\core\impl;
12 
16 
17 // session configuration
18 ini_set('session.cookie_lifetime', 0);
19 ini_set('session.use_cookies', 'On');
20 ini_set('session.use_only_cookies', 'On');
21 ini_set('session.use_strict_mode', 'On');
22 ini_set('session.cookie_httponly', 'On');
23 ini_set('session.use_trans_sid', 'Off');
24 ini_set('session.cache_limiter', 'nocache');
25 ini_set('session.hash_function', 'sha256');
26 
27 /**
28  * Default session implementation.
29  *
30  * @author ingo herwig <ingo@wemove.com>
31  */
32 class DefaultSession implements Session {
33 
34  private static $ERROR_VARNAME = 'Session.errors';
35 
36  private $_anonymousUser = null;
37  private $_authUserVarName = null;
38 
39  /**
40  * Constructor
41  */
42  public function __construct() {
43  $this->_anonymousUser = new AnonymousUser();
44  $this->_authUserVarName = 'auth_user_'.md5(__FILE__);
45 
46  $sessionName = 'wcmf'.md5(__FILE__);
47  session_name($sessionName);
48  // NOTE: prevent "headers already sent" errors in phpunit tests
49  if (!headers_sent()) {
50  session_start();
51  // regenerate session for authenticated sessions
52  if (isset($_SESSION[$this->_authUserVarName])) {
53  session_regenerate_id();
54  }
55  }
56  }
57 
58  public function __destruct() {
59  session_write_close();
60  }
61 
62  /**
63  * @see Session::getID()
64  */
65  public function getID() {
66  return session_id();
67  }
68 
69  /**
70  * @see Session::get()
71  */
72  public function get($key) {
73  $value = null;
74  if (isset($_SESSION[$key])) {
75  $value = $_SESSION[$key];
76  }
77  return $value;
78  }
79 
80  /**
81  * @see Session::set()
82  */
83  public function set($key, $value) {
84  $_SESSION[$key] = $value;
85  }
86 
87  /**
88  * @see Session::remove()
89  */
90  public function remove($key) {
91  unset($_SESSION[$key]);
92  }
93 
94  /**
95  * @see Session::exist()
96  */
97  public function exist($key) {
98  $result = isset($_SESSION[$key]);
99  return $result;
100  }
101 
102  /**
103  * @see Session::clear()
104  */
105  public function clear() {
106  $_SESSION = array();
107  }
108 
109  /**
110  * @see Session::destroy()
111  */
112  public function destroy() {
113  $_SESSION = array();
114  @session_destroy();
115  }
116 
117  /**
118  * @see Session::setAuthUser()
119  */
120  public function setAuthUser(User $authUser) {
121  $this->set($this->_authUserVarName, $authUser);
122  }
123 
124  /**
125  * @see Session::getAuthUser()
126  */
127  public function getAuthUser() {
128  $user = $this->_anonymousUser;
129  // check for auth user in session
130  if ($this->exist($this->_authUserVarName)) {
131  $user = $this->get($this->_authUserVarName);
132  }
133  return $user;
134  }
135 
136  /**
137  * @see Session::addError()
138  */
139  public function addError($key, $error) {
140  if (isset($_SESSION[self::$ERROR_VARNAME])) {
141  $_SESSION[self::$ERROR_VARNAME] = array();
142  }
143  $_SESSION[self::$ERROR_VARNAME][$key] = $error;
144  }
145 
146  /**
147  * @see Session::getError()
148  */
149  public function getError($key) {
150  $error = null;
151  if (isset($_SESSION[self::$ERROR_VARNAME])) {
152  $error = $_SESSION[self::$ERROR_VARNAME][$key];
153  }
154  return $error;
155  }
156 
157  /**
158  * @see Session::getErrors()
159  */
160  public function getErrors() {
161  $errors = $_SESSION[self::$ERROR_VARNAME];
162  return $errors;
163  }
164 
165  /**
166  * @see Session::clearErrors()
167  */
168  public function clearErrors() {
169  unset($_SESSION[self::$ERROR_VARNAME]);
170  }
171 }
User is the interface for users.
Definition: User.php:18
Session is the interface for session implementations and defines access to session variables...
Definition: Session.php:21
Default session implementation.