Browse Source

Fixed session bug.

tags/2.0.0-beta
Qiang Xue 12 years ago
parent
commit
5d6c9a4c9f
  1. 44
      framework/web/Session.php

44
framework/web/Session.php

@ -84,6 +84,8 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
return false; return false;
} }
private $_opened = false;
/** /**
* Starts the session. * Starts the session.
*/ */
@ -92,29 +94,34 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
// this is available in PHP 5.4.0+ // this is available in PHP 5.4.0+
if (function_exists('session_status')) { if (function_exists('session_status')) {
if (session_status() == PHP_SESSION_ACTIVE) { if (session_status() == PHP_SESSION_ACTIVE) {
$this->_opened = true;
return; return;
} }
} }
if ($this->getUseCustomStorage()) { if (!$this->_opened) {
@session_set_save_handler( if ($this->getUseCustomStorage()) {
array($this, 'openSession'), @session_set_save_handler(
array($this, 'closeSession'), array($this, 'openSession'),
array($this, 'readSession'), array($this, 'closeSession'),
array($this, 'writeSession'), array($this, 'readSession'),
array($this, 'destroySession'), array($this, 'writeSession'),
array($this, 'gcSession') array($this, 'destroySession'),
); array($this, 'gcSession')
} );
}
@session_start(); @session_start();
if (session_id() == '') { if (session_id() == '') {
$error = error_get_last(); $this->_opened = false;
$message = isset($error['message']) ? $error['message'] : 'Failed to start session.'; $error = error_get_last();
Yii::error($message, __CLASS__); $message = isset($error['message']) ? $error['message'] : 'Failed to start session.';
} else { Yii::error($message, __CLASS__);
$this->updateFlashCounters(); } else {
$this->_opened = true;
$this->updateFlashCounters();
}
} }
} }
@ -123,6 +130,7 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
*/ */
public function close() public function close()
{ {
$this->_opened = false;
if (session_id() !== '') { if (session_id() !== '') {
@session_write_close(); @session_write_close();
} }
@ -149,7 +157,7 @@ class Session extends Component implements \IteratorAggregate, \ArrayAccess, \Co
return session_status() == PHP_SESSION_ACTIVE; return session_status() == PHP_SESSION_ACTIVE;
} else { } else {
// this is not very reliable // this is not very reliable
return session_id() !== ''; return $this->_opened && session_id() !== '';
} }
} }

Loading…
Cancel
Save