En config.php
jeYii 1.1 Méthode urlManager parseURL fonctionne deux fois
'urlManager'=>array(
'class'=>'UrlManager',
...
En UrlManager.php
je
class UrlManager extends CUrlManager
{
public function parseUrl($request)
{
...
setcookie(microtime(true),date('H:i:s'),strtotime('+10 minutes'));
return parent::parseUrl($request);
}
}
Lorsque je tente la page ouverte, je vois deux biscuits a été produit par setcookie(microtime(true),date('H:i:s'),strtotime('+10 minutes'));
Je me attends il y aurait un seul cookie.
492786392.9662 17%3A53%3A12 // first cookie
1492786392.9704 17%3A53%3A12 // second cookie
Cela signifie méthode parseUrl
fonctionne deux fois. Mais pourquoi? Est-ce normal ou est-ce que je peux l'éviter?
J'ai trouvé ce sujet http://www.yiiframework.com/forum/index.php/topic/3558-url-manager-causes-page-to-load-twice/ mais sans dessication.
Update 1.
J'ai ajouté var_dump('_',Yii::app()->request);
et a remarqué que première sortie a
private '_cookies' (CHttpRequest) => null
en tant que deuxième sortie a
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
Bien s'il a été lancé deux fois, il a été appelé deux fois. Vous devez enregistrer $ _SERVER sur les deux requêtes et le comparer. Quelle est la différence? Peut être JS/CSS/iframe, etc appel qui a conduit à l'analyse d'URL. – szako
J'ai ajouté à la fonction parseUrl setcookie (microtime (vrai), date ('H: i: s'), strtotime ('+ 10 minutes')); var_dump ('_', $ _ SERVER); retourne parent :: parseUrl ($ request); Mais n'a pas été clair. $ _SERVER sort deux fois. Il y a parfois une différence, parfois non. Dans mon nginx locale differnece 'HTTP_PRAGMA' => string 'no-cache' 'HTTP_CACHE_CONTROL' => string 'no-cache' Dans mon apache locale 'HTTP_CACHE_CONTROL' => string « max-age = 0 ' Il n'y a pas de différence dans mon environnement de développement distant avec nginx. Donc, le problème est toujours ouvert. – venoel
Vous voulez dire qu'il est sorti deux fois en une seule requête? Et s'il y a une différence, qu'est-ce que c'est? Le problème existe-t-il à la fois localement et à distance? Essayez de vérifier les différences [backtrace] (http://php.net/manual/fr/function.debug-backtrace.php). Déboguer serait mieux si vous le pouvez. – szako