2009-06-09 5 views
2

Ich habe eine Methode in users_controller.php meines CakePHP-Projekts, das verwendet wird, um einen Benutzer über einen AJAX-Aufruf auf einer WordPress-Site remote einzuloggen. Die Methode funktioniert einwandfrei, wenn sie über Firefox aufgerufen wird, aber wenn ich versuche, sie über AJAX oder direkt vom Browser in IE8 oder Safari aufzurufen, meldet sie sich einfach nicht an. Die Auth-> login() -Methode gibt true zurück, als wäre alles gut, aber es meldet sich nicht an. Irgendwelche Ideen?CakePHP Auth Komponente "Login" Methode Fehler in IE8 + Safari

function remoteLogin($key) 
{ 
    # this method should only be called via AJAX 
    $this->layout = 'ajax'; 

    $matching_key = '***'; 

    if($key == $matching_key) 
    { 
    # auto-login service account 
    $data['User']['username'] = '***'; 
    $data['User']['password'] = $this->Auth->password('***'); 

    $this->Auth->login($data); 
    } 
} 

Hinweis: Ich habe nun bestätigt, dass dieses Verfahren auch nicht in Opera funktioniert. Ich bin legitim verwirrt.

+1

Was Genauer gesagt, ist Firefox das IE, usw. nicht? Wird die Benutzeroberfläche nach Abschluss dieser Funktion aktualisiert? Es hört sich auch so an, als wäre es ein Problem mit dem Javascript, das Sie verwenden, um diese Funktion aufzurufen, und nicht die Funktion selbst (nur weil PHP ziemlich gut aussieht). Mehr Detail bitte, sowie das relevante Javascript würde dieses einfacher zu diagnostizieren machen. – inkedmn

Antwort

0

Sie können Ihre Cookies überprüfen und sicherstellen, dass sie wie erwartet weitergegeben werden. Fiddler ist hilfreich, um den http-Verkehr zu sehen, wie es geht, um diese AJAX-Probleme herauszufinden.

Gehen www.domain.com und domain.com an denselben Ort? Wenn dies der Fall ist, kann dies mit einem CakePHP/IE-Problem zusammenhängen, das ich übergangen habe.

Löschen Sie alle Domain-Level-Cookies und sehen Sie, ob es funktioniert.

In IE werden alle Cookies auf die Subdomain-Cookies angewendet. Wenn Sie also jemals einen Cookie auf domain.com bekommen und später auf www.domain.com gehen, können Sie Ihren Sitzungs-Login zurücksetzen und sich den ganzen Tag abmelden. Der IE ignoriert jedoch die Cookies von www.domain.com und verwendet weiterhin das Original domain.com eins. Ich habe einen Patch für eine alte Version von Cake geschrieben, mit dem Sie den Cookie-Bereich auf domain.com setzen/erzwingen können, selbst wenn sie auf die Website als www.domain.com zugreifen, um dies zu umgehen.

0

Nicht jetzt über IE8, aber Safari blockiert Cross-Domain-Ajax, auch zwischen "Geschwister" unter der gleichen Top-Domain. Z.B. Sie können nicht app.example.com laden ein div mit Ajax von helppages.example.com. Vergiss Cookies, ich spreche einfach nur html geladen mit Ajax.

0
  • Ich denke, das Problem ist Ihre Domäne. Ex: IE oder einige Browser nicht funktionieren, wenn Ihre Domain: abc_def.com, ...
  • Sie bitte Ihre Domain überprüfen und wie abcdef.com = ändern> es wird in Ordnung sein