Yii 1.1 UrlManager方法parseUrl运行两次

时间:2017-04-21 14:56:15

标签: php yii yii1.x

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

1 个答案:

答案 0 :(得分:0)

通过评论检查原因。 parseUrl被多次调用,因为稍后在程序流程中有一个额外的parseUrl调用。

使用user parameter来控制Cookie设置,例如将其命名为cookieSet'或其他任何适合您需要的东西。 parseUrl()运行后,您可以将其设置为' 1'或者为true,在第二次运行中,您可以跳过检查参数。这样,cookie设置在一次调用中只运行一次。