|
|
|
@ -84,6 +84,8 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private $_opened = false; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Starts the session. |
|
|
|
|
*/ |
|
|
|
@ -92,10 +94,12 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
|
|
|
|
|
// this is available in PHP 5.4.0+ |
|
|
|
|
if (function_exists('session_status')) { |
|
|
|
|
if (session_status() == PHP_SESSION_ACTIVE) { |
|
|
|
|
$this->_opened = true; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!$this->_opened) { |
|
|
|
|
if ($this->getUseCustomStorage()) { |
|
|
|
|
@session_set_save_handler( |
|
|
|
|
array($this, 'openSession'), |
|
|
|
@ -110,19 +114,23 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
|
|
|
|
|
@session_start(); |
|
|
|
|
|
|
|
|
|
if (session_id() == '') { |
|
|
|
|
$this->_opened = false; |
|
|
|
|
$error = error_get_last(); |
|
|
|
|
$message = isset($error['message']) ? $error['message'] : 'Failed to start session.'; |
|
|
|
|
Yii::error($message, __CLASS__); |
|
|
|
|
} else { |
|
|
|
|
$this->_opened = true; |
|
|
|
|
$this->updateFlashCounters(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Ends the current session and store session data. |
|
|
|
|
*/ |
|
|
|
|
public function close() |
|
|
|
|
{ |
|
|
|
|
$this->_opened = false; |
|
|
|
|
if (session_id() !== '') { |
|
|
|
|
@session_write_close(); |
|
|
|
|
} |
|
|
|
@ -149,7 +157,7 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
|
|
|
|
|
return session_status() == PHP_SESSION_ACTIVE; |
|
|
|
|
} else { |
|
|
|
|
// this is not very reliable |
|
|
|
|
return session_id() !== ''; |
|
|
|
|
return $this->_opened && session_id() !== ''; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|