37 public function __construct( $sessionName =
'', $sessionExpire = 0 ) {
38 $this->
setParam( $sessionName, $sessionExpire );
41 $this->mSetupSessionHandler->register(
'XCube_Session.SetupSessionHandler' );
44 $this->mGetSessionCookiePath->register(
'XCube_Session.GetSessionCookiePath' );
53 public function setParam( $sessionName =
'', $sessionExpire = 0 ) {
54 $allIniArray = ini_get_all();
56 if (
'' !== $sessionName ) {
57 $this->mSessionName = $sessionName;
59 $this->mSessionName = $allIniArray[
'session.name'][
'global_value'];
62 if ( ! empty( $sessionExpire ) ) {
63 $this->mSessionLifetime = 60 * $sessionExpire;
65 $this->mSessionLifetime = $allIniArray[
'session.cookie_lifetime'][
'global_value'];
73 $this->mSetupSessionHandler->call();
75 session_name( $this->mSessionName );
76 session_set_cookie_params( $this->mSessionLifetime, $this->_cookiePath() );
80 if ( ! empty( $this->mSessionLifetime ) && isset( $_COOKIE[ $this->mSessionName ] ) ) {
82 $session_params = session_get_cookie_params();
83 ! $session_params[
'domain'] and $session_params[
'domain'] =
null;
84 $session_cookie_params = [
89 $session_params[
'domain'],
90 $session_params[
'secure']
92 if ( isset( $session_params[
'httponly'] ) ) {
93 $session_cookie_params[] = $session_params[
'httponly'];
97 call_user_func_array(
'setcookie', $session_cookie_params );
107 public function destroy( $forceCookieClear =
false ) {
111 $currentSessionName = session_name();
112 if ( isset( $_COOKIE[ $currentSessionName ] ) ) {
113 if ( $forceCookieClear || ( $currentSessionName !== $this->mSessionName ) ) {
115 setcookie( $currentSessionName,
'', [
'expires' => time() - 86400,
'path' => $this->_cookiePath()] );
124 public function regenerate() {
125 $oldSessionID = session_id();
126 session_regenerate_id();
127 $newSessionID = session_id();
128 session_id( $oldSessionID );
130 $oldSession = $_SESSION;
131 session_id( $newSessionID );
134 foreach ( array_keys( $oldSession ) as $key ) {
135 $_SESSION[ $key ] = $oldSession[ $key ];
142 public function rename() {
143 if ( session_name() !== $this->mSessionName ) {
144 $oldSessionID = session_id();
145 $oldSession = $_SESSION;
147 session_id( $oldSessionID );
150 foreach ( array_keys( $oldSession ) as $key ) {
151 $_SESSION[ $key ] = $oldSession[ $key ];
159 public function _cookiePath() {
160 static $sessionCookiePath =
null;
161 if ( empty( $sessionCookiePath ) ) {
162 $this->mGetSessionCookiePath->call(
new XCube_Ref( $sessionCookiePath ) );
163 if ( empty( $sessionCookiePath ) ) {
164 $sessionCookiePath =
'/';
168 return $sessionCookiePath;