2009-07-13 3 views
0

Ich arbeite vor Ort, wo Benutzer ein 30-Minuten-Cookie erhalten und nach Ablauf jeder Anrufe an den Server umleiten zu einer "Sitzung abgelaufen ist, klicken Sie hier, um sich erneut anmelden." Hier ist die Falte:jQuery AJAX Trampoline Redirect

Wenn der Benutzer auf die Seite mit der abgelaufenen Sitzung gelangt, ist die URL dieser Seite diejenige der Seite, die sie erreichen wollten. Wenn Sie auf den Link "Erneut einloggen" klicken, gelangen Sie zu einer generischen Anmeldeseite, die die Verweis-URL (die URL, die sie erreichen wollten) verwendet, um sie dahin zurückzubringen, wo sie ursprünglich hinwollte "Bildschirm.

Also, wenn ich einen AJAX-Aufruf an den Server und sagen, dass es einige div mit der Antwort zu füllen, bekomme ich ein div mit der "Sitzung abgelaufen" Seite drin.

Allerdings bekomme ich nur diese "Sitzung abgelaufen" -Seite einmal. Wenn also beispielsweise zwei Fenster für dieselbe Site geöffnet sind und ich auf einen Link klicke, erhalte ich den Fehler "Sitzung abgelaufen". Wenn ich Windows wechsele und auf einen Link in der anderen klicke, bekomme ich die generische Login-Seite. Ich bekomme also nur eine Chance, die Seite "Sitzung abgelaufen" zu sehen.

Nun, ich sah über diese Frage:

How to manage a redirect request after a jQuery Ajax call

und konnte wirklich bedeutende Fortschritte machen, zumindest in meinem Verständnis, aber von dem, was ich sagen kann, diese Lösung im Grunde hat jquery den Trapping Antwort und Verweisen der Seite auf die generische Anmeldeseite.

Ich bin mir nicht sicher, ob das das gleiche ist, was ich will. Zum einen ist es unklar, ob die Login-Seite immer meine Seite (die Ajax-Seite) als Empfehlung sehen wird. Es gibt auch ein anderes Thema, vielleicht auch nicht signifikant, aber es kann sein.

Aufgrund dieser Trampolinumleitung (ich hoffe, das ist der richtige Ausdruck für diesen Fall), neigen POST-Daten dazu, die Rückmeldung nach der erneuten Anmeldung zu unterbrechen. Es wird ein Serverfehler angezeigt, da die URL die falsche Länge hat.

Im Moment habe ich es so eingerichtet, dass, wenn die Serverantwort nicht 200 ist, es die xmlHttp Antwort ausgibt, die beim ersten Trigger ein "Sie werden umgeleitet werden, ist das okay?" Warnung vom Browser. Beim zweiten Trigger bekomme ich die Login-Seite in vollem HTML-Code. (Das hängt eigentlich vom Browser ab. Chrome schmollt nur). So

, was ich will, wenn es getan werden kann, ist dreierlei:

  1. Wenn die Antwort nicht 200 ist, sollte die gesamte Seite mit dem zurück xmlHttp Reaktion ersetzt werden (als Redirect, aber nicht zu einer Adresse, nur auf der Seite, die der Server zu umleiten versucht,) und

  2. die Umleitung/redraw der Seite sollten keine Post-Daten haben, und so dachte ich:

  3. Dies sollte alles als eine globale Funktion erfolgen bevor die eigentliche Abfrage stattfindet.

So die feineren Punkte Ich bin immer verloren, sind:

wie die ganze Seite umleiten richtig (Sie im Auge behalten, ich kann die Seite nicht auslösen zu umleiten, wenn ich die Antwort, weil ich dann die Seite "Sitzung abgelaufen" nicht bekommen werde.)

und

Wenn ich eine Funktion (Ajax Ereignis einstellen kann, glaube ich), dass der Testanruf für all meine Ajax-Funktionen, ohne Bezug zu nehmen auf diese Text-call-Funktion aus jedem Ajax machen Funktion. Ich bin wirklich in der Ajax Events Dokumentation auf der jquery Seite verloren gegangen, da es manchmal so aussieht, als ob es automatisch klingt (wie es auch läuft, wenn ich es anrufe), während es manchmal so aussieht Funktion, die tut, was sie sollte, aber nur für jene Ajax-Funktionen, die daran erinnern, sie zu stellen.

Schlussbemerkung, und ich schätze alle, die bis hierher gelesen hat:

Es ist durchaus möglich, dass die Sitzung abgelaufen Fenster für den Benutzer nicht entscheidend ist, auf die Seite, sie kamen immer wieder aus pre-reauthentication. Eines der Ziele hier ist, die Benutzererfahrung so intakt wie möglich zu lassen. Während der durchschnittliche Benutzer dieser Seite möglicherweise nicht einmal den Absturzbildschirm LIKE, erwarten sie es, und von der privaten Website auf eine einfache "Benutzername/Passwort" -Seite zu gehen wird ablenken und sogar in Bezug auf einige Benutzer.

Antwort

0

Eine Lösung kam nur zu mir, aber ich muss noch die Fehler auszubügeln:

Da die Sitzungsbeginn im Cookie gespeichert wird, kann ich eine Funktion, die vor jeder Ajax-Anforderung, prüft Überprüfen Sie, ob der Cookie abläuft. Wenn dies der Fall ist, kann ich die Seite, auf der sie sich befinden, einfach neu laden, indem ich dieselbe URL verwende und die Seite mit abgelaufener Sitzung erreicht.

+0

Auf der anderen Seite frage ich mich immer noch, ob es tatsächlich eine Möglichkeit gibt, die gesamte Seite auf die Weiterleitung in dem Moment zu schieben, wenn der Server es zurückgibt, anstatt eine Weiterleitungs-URL zu verwenden (was nicht der Fall ist) eine Option.) – Anthony