在config.php
我有
'urlManager'=>array(
'class'=>'UrlManager',
...
在UrlManager.php
我有
class UrlManager extends CUrlManager
{
public function parseUrl($request)
{
...
setcookie(microtime(true),date('H:i:s'),strtotime('+10 minutes'));
return parent::parseUrl($request);
}
}
当我尝试打开页面时,我看到setcookie(microtime(true),date('H:i:s'),strtotime('+10 minutes'));
生成了两个 Cookie
我希望只有一个cookie。
492786392.9662 17%3A53%3A12 // first cookie
1492786392.9704 17%3A53%3A12 // second cookie
这意味着方法parseUrl
运行两次。但为什么?这是正常的行为还是可以避免它?
我发现这个话题只是http://www.yiiframework.com/forum/index.php/topic/3558-url-manager-causes-page-to-load-twice/,但没有出现干扰。
更新1。
我添加var_dump('_',Yii::app()->request);
并注意到了
第一个输出
private '_cookies' (CHttpRequest) => null
作为第二个输出
object(HttpRequest)[2982]
...
object(CCookieCollection)[3044]
private '_request' =>
&object(HttpRequest)[2982]
private '_initialized' => boolean true
private '_d' (CMap) =>
array (size=1)
'YII_CSRF_TOKEN' =>
object(CHttpCookie)[3043]
public 'name' => string 'YII_CSRF_TOKEN' (length=14)
public 'value' => string 'b78823914a0bb40b65093636b55687e683cf289f' (length=40)
public 'domain' => string '' (length=0)
public 'expire' => int 0
public 'path' => string '/' (length=1)
public 'secure' => boolean false
public 'httpOnly' => boolean false
private '_e' (CComponent) => null
private '_m' (CComponent) => null
private '_r' (CMap) => boolean false
private '_e' (CComponent) => null
private '_m' (CComponent) => null
答案 0 :(得分:0)
通过评论检查原因。 parseUrl被多次调用,因为稍后在程序流程中有一个额外的parseUrl调用。
使用user parameter来控制Cookie设置,例如将其命名为cookieSet'或其他任何适合您需要的东西。 parseUrl()运行后,您可以将其设置为' 1'或者为true,在第二次运行中,您可以跳过检查参数。这样,cookie设置在一次调用中只运行一次。