summaryrefslogtreecommitdiff
path: root/framework/Web/UI
diff options
context:
space:
mode:
authorxue <>2006-06-22 00:09:46 +0000
committerxue <>2006-06-22 00:09:46 +0000
commit093b91091672ff2ae645099c8a42b528b29d8e5e (patch)
tree12be746ca540ac18cefb4b1e22ca8d6bd5fc3f03 /framework/Web/UI
parent9af7e1312620de671c4312fbfd723b59ee4685df (diff)
Added TOutputCache.VaryBySession property.
Diffstat (limited to 'framework/Web/UI')
-rw-r--r--framework/Web/UI/WebControls/TOutputCache.php33
1 files changed, 28 insertions, 5 deletions
diff --git a/framework/Web/UI/WebControls/TOutputCache.php b/framework/Web/UI/WebControls/TOutputCache.php
index a63b45ec..e24b978a 100644
--- a/framework/Web/UI/WebControls/TOutputCache.php
+++ b/framework/Web/UI/WebControls/TOutputCache.php
@@ -45,8 +45,10 @@
* which is specified by {@link setVaryByParam VaryByParam} property.
* If a specified request parameter is different, a different version of
* cached content is used. This is extremely useful if a page's content
- * may be variated according to some GET parameters. To variate the cached
- * content by other factors, override {@link calculateCacheKey()} method.
+ * may be variated according to some GET parameters.
+ * The content being cached may also be variated with user sessions if
+ * {@link setVaryBySession VaryBySession} is set true.
+ * To variate the cached content by other factors, override {@link calculateCacheKey()} method.
*
* Output caches can be nested. An outer cache takes precedence over an
* inner cache. This means, if the content cached by the inner cache expires
@@ -80,6 +82,7 @@ class TOutputCache extends TControl implements INamingContainer
private $_actions=array();
private $_varyByParam='';
private $_keyPrefix='';
+ private $_varyBySession=false;
/**
* Returns a value indicating whether body contents are allowed for this control.
@@ -262,12 +265,17 @@ class TOutputCache extends TControl implements INamingContainer
* Calculates the cache key.
* The key is calculated based on the unique ID of this control
* and the request parameters specified via {@link setVaryByParam VaryByParam}.
+ * If {@link getVaryBySession VaryBySession} is true, the session ID
+ * will also participate in the key calculation.
* This method may be overriden to support other variations in
* the calculated cache key.
* @return string cache key
*/
protected function calculateCacheKey()
{
+ $key=$this->getBaseCacheKey();
+ if($this->_varyBySession())
+ $key.=$this->getSession()->getSessionID();
if($this->_varyByParam!=='')
{
$params=array();
@@ -277,10 +285,9 @@ class TOutputCache extends TControl implements INamingContainer
$name=trim($name);
$params[$name]=$request->itemAt($name);
}
- return $this->getBaseCacheKey().serialize($params);
+ $key.=serialize($params);
}
- else
- return $this->getBaseCacheKey();
+ return $key;
}
/**
@@ -379,6 +386,22 @@ class TOutputCache extends TControl implements INamingContainer
}
/**
+ * @return boolean whether the content being cached should be differentiated according to user sessions. Defaults to false.
+ */
+ public function getVaryBySession()
+ {
+ return $this->_varyBySession;
+ }
+
+ /**
+ * @param boolean whether the content being cached should be differentiated according to user sessions.
+ */
+ public function setVaryBySession($value)
+ {
+ $this->_varyBySession=TPropertyValue::ensureBoolean($value);
+ }
+
+ /**
* This event is raised when the output cache is checking cache dependency.
* An event handler may be written to check customized dependency conditions.
* The checking result should be saved by setting {@link TOutputCacheEventParameter::setIsValid IsValid}