In config.php
habe ichYü 1.1 urlManager Methode ParseURL läuft zweimal
'urlManager'=>array(
'class'=>'UrlManager',
...
In UrlManager.php
habe ich
class UrlManager extends CUrlManager
{
public function parseUrl($request)
{
...
setcookie(microtime(true),date('H:i:s'),strtotime('+10 minutes'));
return parent::parseUrl($request);
}
}
Wenn ich offen Seite versuche ich sehen zwei Cookies durch setcookie(microtime(true),date('H:i:s'),strtotime('+10 minutes'));
produziert wurde ich erwarten Es gibt nur einen Keks.
492786392.9662 17%3A53%3A12 // first cookie
1492786392.9704 17%3A53%3A12 // second cookie
Es bedeutet, dass Methode parseUrl
zweimal ausgeführt wird. Aber warum? Ist es normales Verhalten oder kann ich es vermeiden?
Ich fand nur dieses Thema http://www.yiiframework.com/forum/index.php/topic/3558-url-manager-causes-page-to-load-twice/ aber ohne Entscheidung.
-Update 1.
habe ich var_dump('_',Yii::app()->request);
und bemerkte, dass erste Ausgabe
private '_cookies' (CHttpRequest) => null
als zweiter Ausgang hat
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
Nun, wenn es zweimal ausgeführt wurde, wurde es zweimal aufgerufen. Sie sollten $ _SERVER bei den beiden Anfragen protokollieren und vergleichen. Was ist der Unterschied? Könnte JS/CSS/iframe, etc. sein, was zur URL-Analyse führte. – szako
Ich habe zur Funktion hinzugefügt parseUrl setcookie (Mikrozeit (true), Datum ('H: i: s'), strtotime ('+ 10 Minuten')); var_dump ('_', $ _ SERVER); return Elternteil :: parseUrl ($ Anfrage); Aber machte es nicht klar. $ _SERVER wird zweimal ausgegeben. Irgendwann gibt es Unterschiede, manchmal nicht. In meinem lokalen nginx differnece 'HTTP_PRAGMA' => string 'no-cache' 'HTTP_CACHE_CONTROL' => string 'no-cache' In meinem lokalen Apache 'HTTP_CACHE_CONTROL' => string ‚max-age = 0 ' Es gibt keinen Unterschied in meiner Remote-Entwicklerumgebung mit Nginx. Das Problem ist also noch offen. – venoel
Sie meinen es wird zweimal in einer Anfrage ausgegeben? Und wenn es einen Unterschied gibt, was ist es? Liegt das Problem sowohl lokal als auch remote vor? Versuchen Sie, [backtrace] (http://php.net/manual/en/function.debug-backtrace.php) Unterschiede zu überprüfen. Debugging wäre besser, wenn Sie können. – szako