CHttpSession
CHttpSession provides session-level data management and the related configurations.
To start the session, call
open(); To complete and send out session data, call
close(); To destroy the session, call
destroy().
If
autoStart is set true, the session will be started automatically when the application component is initialized by the application.
CHttpSession can be used like an array to set and get session data. For example,
$session=new CHttpSession;
$session->open();
$value1=$session['name1']; // get session variable 'name1'
$value2=$session['name2']; // get session variable 'name2'
foreach($session as $name=>$value) // traverse all session variables
$session['name3']=$value3; // set session variable 'name3'
The following configurations are available for session:
See the corresponding setter and getter documentation for more information. Note, these properties must be set before the session is started.
CHttpSession can be extended to support customized session storage. Override
openSession,
closeSession,
readSession,
writeSession,
destroySession and
gcSession and set
useCustomStorage to true. Then, the session data will be stored and retrieved using the above methods.
CHttpSession is a Web application component that can be accessed via
CWebApplication::getSession().
Public Properties
Property |
Type |
Description |
Defined By |
autoStart | boolean | whether the session should be automatically started when the session application component is initialized, defaults to true. | CHttpSession |
behaviors | array | the behaviors that should be attached to this component. | CApplicationComponent |
cookieMode | string | how to use cookie to store session ID. | CHttpSession |
cookieParams | array | the session cookie parameters. | CHttpSession |
count | integer | Returns the number of items in the session. | CHttpSession |
gCProbability | float | the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance. | CHttpSession |
isInitialized | boolean | Checks if this application component has been initialized. | CApplicationComponent |
isStarted | boolean | whether the session has started | CHttpSession |
iterator | CHttpSessionIterator | Returns an iterator for traversing the session variables. | CHttpSession |
keys | array | the list of session variable names | CHttpSession |
savePath | string | the current session save path, defaults to {@link http://php. | CHttpSession |
sessionID | string | the current session ID | CHttpSession |
sessionName | string | the current session name | CHttpSession |
timeout | integer | the number of seconds after which data will be seen as 'garbage' and cleaned up, defaults to 1440 seconds. | CHttpSession |
useCustomStorage | boolean | Returns a value indicating whether to use custom session storage. | CHttpSession |
useTransparentSessionID | boolean | whether transparent sid support is enabled or not, defaults to false. | CHttpSession |
Property Details
public boolean $autoStart;
whether the session should be automatically started when the session application component is initialized, defaults to true.
public string getCookieMode()
public void setCookieMode(string $value)
how to use cookie to store session ID. Defaults to 'Allow'.
public array getCookieParams()
public void setCookieParams(array $value)
the session cookie parameters.
public integer getCount()
Returns the number of items in the session.
public float getGCProbability()
public void setGCProbability(float $value)
the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance.
public boolean getIsStarted()
whether the session has started
public CHttpSessionIterator getIterator()
Returns an iterator for traversing the session variables. This method is required by the interface IteratorAggregate.
public array getKeys()
the list of session variable names
public string getSavePath()
public void setSavePath(string $value)
the current session save path, defaults to http://php.net/session.save_path.
public string getSessionID()
public void setSessionID(string $value)
the current session ID
public string getSessionName()
public void setSessionName(string $value)
the current session name
public integer getTimeout()
public void setTimeout(integer $value)
the number of seconds after which data will be seen as 'garbage' and cleaned up, defaults to 1440 seconds.
public boolean getUseCustomStorage()
Returns a value indicating whether to use custom session storage. This method should be overridden to return true if custom session storage handler should be used. If returning true, make sure the methods openSession, closeSession, readSession, writeSession, destroySession, and gcSession are overridden in child class, because they will be used as the callback handlers. The default implementation always return false.
public boolean getUseTransparentSessionID()
public void setUseTransparentSessionID(boolean $value)
whether transparent sid support is enabled or not, defaults to false.
Method Details
public void add(mixed $key, mixed $value) |
$key | mixed | session variable name |
$value | mixed | session variable value |
Adds a session variable. Note, if the specified name already exists, the old value will be removed first.
Removes all session variables
Ends the current session and store session data.
public boolean closeSession() |
{return} | boolean | whether session is closed successfully |
Session close handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.
public boolean contains(mixed $key) |
$key | mixed | session variable name |
{return} | boolean | whether there is the named session variable |
public integer count() |
{return} | integer | number of items in the session. |
Returns the number of items in the session. This method is required by Countable interface.
Frees all session variables and destroys all data registered to a session.
public boolean destroySession(string $id) |
$id | string | session ID |
{return} | boolean | whether session is destroyed successfully |
Session destroy handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.
public boolean gcSession(integer $maxLifetime) |
$maxLifetime | integer | the number of seconds after which data will be seen as 'garbage' and cleaned up. |
{return} | boolean | whether session is GCed successfully |
Session GC (garbage collection) handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.
public mixed get(mixed $key, mixed $defaultValue=NULL) |
$key | mixed | the session variable name |
$defaultValue | mixed | the default value to be returned when the session variable does not exist. |
{return} | mixed | the session variable value, or $defaultValue if the session variable does not exist. |
Returns the session variable value with the session variable name. This method is very similar to itemAt and offsetGet, except that it will return $defaultValue if the session variable does not exist.
public string getCookieMode() |
{return} | string | how to use cookie to store session ID. Defaults to 'Allow'. |
Source Code: framework/web/CHttpSession.php#255 (
show)
public function getCookieMode()
{
if(ini_get('session.use_cookies')==='0')
return 'none';
elseif(ini_get('session.use_only_cookies')==='0')
return 'allow';
else
return 'only';
}
public array getCookieParams() |
{return} | array | the session cookie parameters. |
public integer getCount() |
{return} | integer | the number of session variables |
Returns the number of items in the session.
public float getGCProbability() |
{return} | float | the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance. |
public boolean getIsStarted() |
{return} | boolean | whether the session has started |
Source Code: framework/web/CHttpSession.php#152 (
show)
public function getIsStarted()
{
if(function_exists('session_status'))
return session_status()===PHP_SESSION_ACTIVE;
return session_id()!=='';
}
Returns an iterator for traversing the session variables. This method is required by the interface IteratorAggregate.
public array getKeys() |
{return} | array | the list of session variable names |
public string getSessionID() |
{return} | string | the current session ID |
public string getSessionName() |
{return} | string | the current session name |
public integer getTimeout() |
{return} | integer | the number of seconds after which data will be seen as 'garbage' and cleaned up, defaults to 1440 seconds. |
public boolean getUseCustomStorage() |
{return} | boolean | whether to use custom storage. |
Returns a value indicating whether to use custom session storage. This method should be overridden to return true if custom session storage handler should be used. If returning true, make sure the methods openSession, closeSession, readSession, writeSession, destroySession, and gcSession are overridden in child class, because they will be used as the callback handlers. The default implementation always return false.
public boolean getUseTransparentSessionID() |
{return} | boolean | whether transparent sid support is enabled or not, defaults to false. |
Initializes the application component. This method is required by IApplicationComponent and is invoked by application.
public mixed itemAt(mixed $key) |
$key | mixed | the session variable name |
{return} | mixed | the session variable value, null if no such variable exists |
Returns the session variable value with the session variable name. This method is exactly the same as offsetGet.
public boolean offsetExists(mixed $offset) |
$offset | mixed | the offset to check on |
{return} | boolean | |
This method is required by the interface ArrayAccess.
public mixed offsetGet(integer $offset) |
$offset | integer | the offset to retrieve element. |
{return} | mixed | the element at the offset, null if no element is found at the offset |
This method is required by the interface ArrayAccess.
public void offsetSet(integer $offset, mixed $item) |
$offset | integer | the offset to set element |
$item | mixed | the element value |
This method is required by the interface ArrayAccess.
public void offsetUnset(mixed $offset) |
$offset | mixed | the offset to unset element |
This method is required by the interface ArrayAccess.
Source Code: framework/web/CHttpSession.php#109 (
show)
public function open()
{
if($this->getUseCustomStorage())
@session_set_save_handler(array($this,'openSession'),array($this,'closeSession'),array($this,'readSession'),array($this,'writeSession'),array($this,'destroySession'),array($this,'gcSession'));
@session_start();
if(YII_DEBUG && session_id()=='')
{
$message=Yii::t('yii','Failed to start session.');
if(function_exists('error_get_last'))
{
$error=error_get_last();
if(isset($error['message']))
$message=$error['message'];
}
Yii::log($message, CLogger::LEVEL_WARNING, 'system.web.CHttpSession');
}
}
Starts the session if it has not started yet.
public boolean openSession(string $savePath, string $sessionName) |
$savePath | string | session save path |
$sessionName | string | session name |
{return} | boolean | whether session is opened successfully |
Session open handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.
public string readSession(string $id) |
$id | string | session ID |
{return} | string | the session data |
Session read handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.
public void regenerateID(boolean $deleteOldSession=false) |
$deleteOldSession | boolean | Whether to delete the old associated session file or not. |
Updates the current session id with a newly generated one . Please refer to http://php.net/session_regenerate_id for more details.
public mixed remove(mixed $key) |
$key | mixed | the name of the session variable to be removed |
{return} | mixed | the removed value, null if no such session variable. |
Source Code: framework/web/CHttpSession.php#500 (
show)
public function remove($key)
{
if(isset($_SESSION[$key]))
{
$value=$_SESSION[$key];
unset($_SESSION[$key]);
return $value;
}
else
return null;
}
Removes a session variable.
public void setCookieMode(string $value) |
$value | string | how to use cookie to store session ID. Valid values include 'none', 'allow' and 'only'. |
Source Code: framework/web/CHttpSession.php#269 (
show)
public function setCookieMode($value)
{
if($value==='none')
{
ini_set('session.use_cookies','0');
ini_set('session.use_only_cookies','0');
}
elseif($value==='allow')
{
ini_set('session.use_cookies','1');
ini_set('session.use_only_cookies','0');
}
elseif($value==='only')
{
ini_set('session.use_cookies','1');
ini_set('session.use_only_cookies','1');
}
else
throw new CException(Yii::t('yii','CHttpSession.cookieMode can only be "none", "allow" or "only".'));
}
public void setCookieParams(array $value) |
$value | array | cookie parameters, valid keys include: lifetime, path, domain, secure, httponly. Note that httponly is all lowercase. |
Source Code: framework/web/CHttpSession.php#241 (
show)
public function setCookieParams($value)
{
$data=session_get_cookie_params();
extract($data);
extract($value);
if(isset($httponly))
session_set_cookie_params($lifetime,$path,$domain,$secure,$httponly);
else
session_set_cookie_params($lifetime,$path,$domain,$secure);
}
Sets the session cookie parameters. The effect of this method only lasts for the duration of the script. Call this method before the session starts.
public void setGCProbability(float $value) |
$value | float | the probability (percentage) that the gc (garbage collection) process is started on every session initialization. |
Source Code: framework/web/CHttpSession.php#302 (
show)
public function setGCProbability($value)
{
if($value>=0 && $value<=100)
{
// percent * 21474837 / 2147483647 ≈ percent * 0.01
ini_set('session.gc_probability',floor($value*21474836.47));
ini_set('session.gc_divisor',2147483647);
}
else
throw new CException(Yii::t('yii','CHttpSession.gcProbability "{value}" is invalid. It must be a float between 0 and 100.',
array('{value}'=>$value)));
}
public void setSavePath(string $value) |
$value | string | the current session save path |
Source Code: framework/web/CHttpSession.php#215 (
show)
public function setSavePath($value)
{
if(is_dir($value))
session_save_path($value);
else
throw new CException(Yii::t('yii','CHttpSession.savePath "{path}" is not a valid directory.',
array('{path}'=>$value)));
}
public void setSessionID(string $value) |
$value | string | the session ID for the current session |
public void setSessionName(string $value) |
$value | string | the session name for the current session, must be an alphanumeric string, defaults to PHPSESSID |
public void setTimeout(integer $value) |
$value | integer | the number of seconds after which data will be seen as 'garbage' and cleaned up |
public void setUseTransparentSessionID(boolean $value) |
$value | boolean | whether transparent sid support is enabled or not. |
public array toArray() |
{return} | array | the list of all session variables in array |
public boolean writeSession(string $id, string $data) |
$id | string | session ID |
$data | string | session data |
{return} | boolean | whether session write is successful |
Session write handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.