CHttpSession
鍖 | system.web |
---|---|
缁ф壙 | class CHttpSession » CApplicationComponent » CComponent |
瀹炵幇 | IApplicationComponent, IteratorAggregate, Traversable, ArrayAccess, Countable |
瀛愮被 | CCacheHttpSession, CDbHttpSession |
婧愯嚜 | 1.0 |
鐗堟湰 | $Id: CHttpSession.php 3511 2011-12-27 00:02:53Z alexander.makarow $ |
婧愮爜 | framework/web/CHttpSession.php |
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:
- sessionID;
- sessionName;
- autoStart;
- savePath;
- cookieParams;
- gcProbability;
- cookieMode;
- useTransparentSessionID;
- timeout.
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().
鍏叡灞炴
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
autoStart | boolean | whether the session should be automatically started when the session application component is initialized, defaults to true. | CHttpSession |
behaviors | array | 杩欎釜搴旂敤缁勪欢闄勫姞鐨勮涓恒 杩欐琛屼负灏嗗湪搴旂敤缁勪欢璋冪敤init鏃堕檮鍔犲湪搴旂敤缁勪欢涓娿 璇峰弬鐓CModel::behaviors濡備綍鎸囧畾姝ゅ睘鎬у笺 | 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 | integer | the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance. | CHttpSession |
isInitialized | boolean | 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 | 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 '/tmp'. | 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 |
鍏叡鏂规硶
鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
__call() | 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 | CComponent |
__get() | 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 | CComponent |
__isset() | 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 | CComponent |
__set() | 璁剧疆涓涓粍浠剁殑灞炴у笺 | CComponent |
__unset() | 璁剧疆涓涓粍浠剁殑灞炴т负null銆 | CComponent |
add() | Adds a session variable. | CHttpSession |
asa() | 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° | CComponent |
attachBehavior() | 闄勫姞涓涓涓哄埌缁勪欢銆 | CComponent |
attachBehaviors() | 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 | CComponent |
attachEventHandler() | 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 | CComponent |
canGetProperty() | 纭畾灞炴ф槸鍚﹀彲璇汇 | CComponent |
canSetProperty() | 纭畾灞炴ф槸鍚﹀彲鍐欍 | CComponent |
clear() | Removes all session variables | CHttpSession |
close() | Ends the current session and store session data. | CHttpSession |
closeSession() | Session close handler. | CHttpSession |
contains() | CHttpSession | |
count() | Returns the number of items in the session. | CHttpSession |
destroy() | Frees all session variables and destroys all data registered to a session. | CHttpSession |
destroySession() | Session destroy handler. | CHttpSession |
detachBehavior() | 浠庣粍浠朵腑鍒嗙涓涓涓恒 | CComponent |
detachBehaviors() | 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 | CComponent |
detachEventHandler() | 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 | CComponent |
disableBehavior() | 绂佺敤涓涓檮鍔犺涓恒 | CComponent |
disableBehaviors() | 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
enableBehavior() | 鍚敤涓涓檮鍔犺涓恒 | CComponent |
enableBehaviors() | 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 | CComponent |
evaluateExpression() | 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 | CComponent |
gcSession() | Session GC (garbage collection) handler. | CHttpSession |
get() | Returns the session variable value with the session variable name. | CHttpSession |
getCookieMode() | 杩斿洖how to use cookie to store session ID. Defaults to 'Allow'. | CHttpSession |
getCookieParams() | 杩斿洖the session cookie parameters. | CHttpSession |
getCount() | Returns the number of items in the session. | CHttpSession |
getEventHandlers() | 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 | CComponent |
getGCProbability() | 杩斿洖the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance. | CHttpSession |
getIsInitialized() | 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 | CApplicationComponent |
getIsStarted() | 妫鏌hether the session has started | CHttpSession |
getIterator() | Returns an iterator for traversing the session variables. | CHttpSession |
getKeys() | 杩斿洖the list of session variable names | CHttpSession |
getSavePath() | 杩斿洖the current session save path, defaults to '/tmp'. | CHttpSession |
getSessionID() | 杩斿洖the current session ID | CHttpSession |
getSessionName() | 杩斿洖the current session name | CHttpSession |
getTimeout() | 杩斿洖the number of seconds after which data will be seen as 'garbage' and cleaned up, defaults to 1440 seconds. | CHttpSession |
getUseCustomStorage() | Returns a value indicating whether to use custom session storage. | CHttpSession |
getUseTransparentSessionID() | 杩斿洖whether transparent sid support is enabled or not, defaults to false. | CHttpSession |
hasEvent() | 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 | CComponent |
hasEventHandler() | 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 | CComponent |
hasProperty() | 纭畾灞炴ф槸鍚﹁瀹氫箟銆 | CComponent |
init() | Initializes the application component. | CHttpSession |
itemAt() | Returns the session variable value with the session variable name. | CHttpSession |
offsetExists() | This method is required by the interface ArrayAccess. | CHttpSession |
offsetGet() | This method is required by the interface ArrayAccess. | CHttpSession |
offsetSet() | This method is required by the interface ArrayAccess. | CHttpSession |
offsetUnset() | This method is required by the interface ArrayAccess. | CHttpSession |
open() | Starts the session if it has not started yet. | CHttpSession |
openSession() | Session open handler. | CHttpSession |
raiseEvent() | 鍙戣捣涓涓簨浠躲 | CComponent |
readSession() | Session read handler. | CHttpSession |
regenerateID() | Updates the current session id with a newly generated one . | CHttpSession |
remove() | Removes a session variable. | CHttpSession |
setCookieMode() | 璁剧疆how to use cookie to store session ID. Valid values include 'none', 'allow' and 'only'. | CHttpSession |
setCookieParams() | Sets the session cookie parameters. | CHttpSession |
setGCProbability() | 璁剧疆the probability (percentage) that the gc (garbage collection) process is started on every session initialization. | CHttpSession |
setSavePath() | 璁剧疆the current session save path | CHttpSession |
setSessionID() | 璁剧疆the session ID for the current session | CHttpSession |
setSessionName() | 璁剧疆the session name for the current session, must be an alphanumeric string, defaults to PHPSESSID | CHttpSession |
setTimeout() | 璁剧疆the number of seconds after which data will be seen as 'garbage' and cleaned up | CHttpSession |
setUseTransparentSessionID() | 璁剧疆whether transparent sid support is enabled or not. | CHttpSession |
toArray() | CHttpSession | |
writeSession() | Session write handler. | CHttpSession |
灞炴ц缁
whether the session should be automatically started when the session application component is initialized, defaults to true.
how to use cookie to store session ID. Defaults to 'Allow'.
the session cookie parameters.
Returns the number of items in the session.
the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance.
whether the session has started
Returns an iterator for traversing the session variables. This method is required by the interface IteratorAggregate.
the list of session variable names
the current session save path, defaults to '/tmp'.
the current session ID
the current session name
the number of seconds after which data will be seen as 'garbage' and cleaned up, defaults to 1440 seconds.
Returns a value indicating whether to use custom session storage. This method should be overriden 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.
whether transparent sid support is enabled or not, defaults to false.
鏂规硶璇︾粏
public void add(mixed $key, mixed $value)
| ||
$key | mixed | session variable name |
$value | mixed | session variable value |
public function add($key,$value)
{
$_SESSION[$key]=$value;
}
Adds a session variable. Note, if the specified name already exists, the old value will be removed first.
public void clear()
|
public function clear()
{
foreach(array_keys($_SESSION) as $key)
unset($_SESSION[$key]);
}
Removes all session variables
public void close()
|
public function close()
{
if(session_id()!=='')
@session_write_close();
}
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 function contains($key)
{
return isset($_SESSION[$key]);
}
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.
public void destroy()
|
public function destroy()
{
if(session_id()!=='')
{
@session_unset();
@session_destroy();
}
}
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 |
public function gcSession($maxLifetime)
{
return true;
}
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. |
public function get($key,$defaultValue=null)
{
return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;
}
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'. |
public function getCookieMode()
{
if(ini_get('session.use_cookies')==='0')
return 'none';
else if(ini_get('session.use_only_cookies')==='0')
return 'allow';
else
return 'only';
}
public array getCookieParams()
| ||
{return} | array | the session cookie parameters. |
public function getCookieParams()
{
return session_get_cookie_params();
}
public integer getCount()
| ||
{return} | integer | the number of session variables |
Returns the number of items in the session.
public integer getGCProbability()
| ||
{return} | integer | the probability (percentage) that the gc (garbage collection) process is started on every session initialization, defaults to 1 meaning 1% chance. |
public function getGCProbability()
{
return (int)ini_get('session.gc_probability');
}
public boolean getIsStarted()
| ||
{return} | boolean | whether the session has started |
public function getIsStarted()
{
return session_id()!=='';
}
public CHttpSessionIterator getIterator()
| ||
{return} | CHttpSessionIterator | an iterator for traversing the session variables. |
public function getIterator()
{
return new CHttpSessionIterator;
}
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 function getKeys()
{
return array_keys($_SESSION);
}
public string getSavePath()
| ||
{return} | string | the current session save path, defaults to '/tmp'. |
public function getSavePath()
{
return session_save_path();
}
public string getSessionID()
| ||
{return} | string | the current session ID |
public string getSessionName()
| ||
{return} | string | the current session name |
public function getSessionName()
{
return 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 function getTimeout()
{
return (int)ini_get('session.gc_maxlifetime');
}
public boolean getUseCustomStorage()
| ||
{return} | boolean | whether to use custom storage. |
Returns a value indicating whether to use custom session storage. This method should be overriden 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. |
public function getUseTransparentSessionID()
{
return ini_get('session.use_trans_sid')==1;
}
public void init()
|
public function init()
{
parent::init();
if($this->autoStart)
$this->open();
register_shutdown_function(array($this,'close'));
}
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 |
public function itemAt($key)
{
return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}
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 |
public function offsetExists($offset)
{
return isset($_SESSION[$offset]);
}
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 |
public function offsetGet($offset)
{
return isset($_SESSION[$offset]) ? $_SESSION[$offset] : null;
}
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 |
public function offsetSet($offset,$item)
{
$_SESSION[$offset]=$item;
}
This method is required by the interface ArrayAccess.
public void offsetUnset(mixed $offset)
| ||
$offset | mixed | the offset to unset element |
public function offsetUnset($offset)
{
unset($_SESSION[$offset]);
}
This method is required by the interface ArrayAccess.
public void open()
|
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 |
public function openSession($savePath,$sessionName)
{
return true;
}
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. |
public function regenerateID($deleteOldSession=false)
{
session_regenerate_id($deleteOldSession);
}
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. |
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'. |
public function setCookieMode($value)
{
if($value==='none')
{
ini_set('session.use_cookies','0');
ini_set('session.use_only_cookies','0');
}
else if($value==='allow')
{
ini_set('session.use_cookies','1');
ini_set('session.use_only_cookies','0');
}
else if($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. |
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(integer $value)
| ||
$value | integer | the probability (percentage) that the gc (garbage collection) process is started on every session initialization. |
public function setGCProbability($value)
{
$value=(int)$value;
if($value>=0 && $value<=100)
{
ini_set('session.gc_probability',$value);
ini_set('session.gc_divisor','100');
}
else
throw new CException(Yii::t('yii','CHttpSession.gcProbability "{value}" is invalid. It must be an integer between 0 and 100.',
array('{value}'=>$value)));
}
public void setSavePath(string $value)
| ||
$value | string | the current session save path |
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 function setSessionID($value)
{
session_id($value);
}
public void setSessionName(string $value)
| ||
$value | string | the session name for the current session, must be an alphanumeric string, defaults to PHPSESSID |
public function setSessionName($value)
{
session_name($value);
}
public void setTimeout(integer $value)
| ||
$value | integer | the number of seconds after which data will be seen as 'garbage' and cleaned up |
public function setTimeout($value)
{
ini_set('session.gc_maxlifetime',$value);
}
public void setUseTransparentSessionID(boolean $value)
| ||
$value | boolean | whether transparent sid support is enabled or not. |
public function setUseTransparentSessionID($value)
{
ini_set('session.use_trans_sid',$value?'1':'0');
}
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 |
public function writeSession($id,$data)
{
return true;
}
Session write handler. This method should be overridden if useCustomStorage is set true. Do not call this method directly.