2017-08-16 1 views
0

ich habe einen Bereich einer Webseite behandeln, die eine Zeiterfassungs anzeigt und der Benutzer kann eine Woche gehen vorwärts/rückwärts nach links und rechts klicken Sie auf:Wie mit einem PHP-Session-Timeout

<script type="text/javascript"> 
var TimesheetOffset = 0; 
function TimesheetNav(AdjustBy) { 
    TimesheetOffset = TimesheetOffset + AdjustBy; 
    $("#timesheets").load("populate_timesheets.php?start=" + TimesheetOffset); 
} 
</script> 

Das populate_timesheets.php Skript die Zeiterfassungsinformationen in einem DIV Bereich zeigt mit der ID von „Zeiterfassungen“, aber nur, wenn der Benutzer in und ihre Sitzung angemeldet ist noch nicht abgelaufen ist - wenn die Sitzung abgelaufen ist es zeigt eine Login-Seite:

if (!isset($_SESSION['login_user'])) { 
     header("location: index.php"); 
    } 

Das Problem ist, dass wenn die Sitzung abgelaufen ist, die index.php-Skript erscheint, wo die Arbeitszeittabelle angezeigt werden sollte, anstatt die gesamte Seite zu ersetzen. Wie kann ich PHP oder JavaScript so ändern, dass die Anmeldeseite die gesamte Seite ersetzt, wenn die Sitzung abgelaufen ist?

+1

Fordert Sie könnte $ '(" # timesheets "). load()' zu etwas ändern, mit dem Sie dann den Antwortcode behandeln können. Sie können den Server auch abfragen, um die Sitzung am Leben zu halten oder um im Falle eines Timeouts umzuleiten. Sie können auch den GC in der Sitzung ändern, damit er länger bleibt. viele dinge was hast du bisher probiert? –

+0

Sie können das "Frontend" nicht von einer Hintergrundanforderung umleiten. Sie müssen dies im Frontend tun, das heißt, mit JavaScript auf die Anmeldeseite umleiten. Daher muss Ihr serverseitiges Skript nur einen _value_ an Ihr JavaScript zurückgeben, auf dem diese Entscheidung basieren kann. Und das bedeutet wahrscheinlich, dass Sie .load nicht an erster Stelle verwenden möchten, da diese Art von Funktionalität nicht eingebaut ist. Daher ist eine "normale" AJAX-Anfrage möglicherweise die bessere Wahl, da Sie dadurch flexibler auf die beiden Fälle reagieren können. – CBroe

Antwort

1

JavaScript-Code:

$.ajax("populate_timesheets.php?start=" + TimesheetOffset, { 
    type: "GET", 
    statusCode: { 
     401: function (response) { 
     // redirect to login page 
     } 
    }, 
    success: function (data) { 
     $("#timesheets").html(data); 
    }, 
    error: function (error) { 
     console.log('Error occured: ', error); 
    } 
}); 

PHP-Code:

if (!isset($_SESSION['login_user'])) { 
    header("HTTP/1.1 401 Unauthorized"); 
    return; 
} 

ich diesen Code nicht testen, also, wenn Sie Problem haben, lesen Dokumentation jQuery über AJAX :)

+0

Ich habe diesen Code ausprobiert, aber aus irgendeinem Grund füllt er das Daily 'Timesheets' nicht auf - können Sie das bitte überprüfen? –

+0

Ich habe vergessen, einen Parameter zu Callback-Funktion in $ .get hinzufügen. Versuchen Sie es jetzt, ich habe meine Antwort aktualisiert. –

+0

Danke, es füllt jetzt gut aus, aber wenn die Sitzung abläuft, erscheint die Login-Seite immer noch innerhalb des 'Zeiterfassungs-DIV 'und nicht der ganzen Seite –

Verwandte Themen