2017-06-15 5 views
0

Ich habe kürzlich herausgefunden, dass Cookies und sessionStorage zwischen den Neustarts des Browsers bestehen bleiben, wenn in Chrome die Option "Fortfahren, wo ich aufgehört habe" aktiviert wird. Darüber hinaus sprechen einige Threads darüber, dass Chrome-Hintergrundprozesse auch nach dem Herunterfahren des Browsers geöffnet bleiben. Und Thread nach Thread nach Thread von Stackoverflow und vielen anderen Websites haben viele Leute die gleiche Frage stellen, aber niemand posten tatsächlich eine echte Lösung für das Problem. Chrome not clearing SESSION COOKIES on close/exitUmgehung des Google Chrome-Sitzungscookies

Ich dachte, vielleicht könnte ich erkennen, sie aus dem Fenster/Tab heruntergefahren, aber das funktioniert auch nicht: javascript detect browser close tab/close browser

ich auf die Frage in Chrome überprüft, herauszufinden jemand es jetzt und gefunden hatte berichtet, dass sie haben keine Pläne, dies zu beheben: https://bugs.chromium.org/p/chromium/issues/detail?id=128513

auch hier sehen: Chrome doesn't delete session cookies

mit session in Javascript auch zwischen schließt von Tabs und Fenstern bestehen bleiben wird, wenn „weitermachen, wo ich aufgehört habe“ aktiviert ist, und ich kann das erwarten Endbenutzer zu c hange diese Einstellung.

Das Internet läuft immer noch, also frage ich mich, was die Behebung dieses Problems ist?

Ein Artikel las ich sagte, sie begann das Ablaufdatum ihrer Cookies auf 1 Stunde einstellen: http://erlycoder.com/111/google-chrome-session-cookie-expiration-issue-feature-your-personal-data-is-insecure-now-

Sicher, ich Verfallsdaten auf meine Cookies können, aber selbst wenn ich den Wert ‚1 Stunde sagen Wenn der Benutzer die Registerkarte schließt und innerhalb einer Stunde erneut öffnet, treten Probleme auf.

Vorschläge?

+2

Warum ist es ein Problem? Sitzungen, die in diesen Fällen "offen" bleiben, sind eine Funktion, zumindest sieht Chrome dies so an. Wie im Fehlerbericht gesagt wird: 'Wir haben es geändert, weil" dort weitermachen, wo ich aufgehört habe "bedeutet" weitermachen, wo ich aufgehört habe ". Das ist eine vollkommen vernünftige Einstellung. Wie du selbst sagst: "Das Internet macht noch weiter", was genau ist das Problem? –

+2

Sie können in Ihrer Sitzung eine Ablaufzeit festlegen, die bei jedem Laden der Seite aktualisiert wird. Wenn eine Seite nach dieser Ablaufzeit geladen wird, respawnen Sie einfach die Sitzung und den entsprechenden Cookie - im Wesentlichen wie Sie es tun würden, wenn Sie nach x Minuten Inaktivität eine Zeitüberschreitung erzwingen wollten. – CD001

+0

@KarlReid Weil in meiner Anwendung Probleme mit Cookies verursacht werden. Ich brauche ein komplett neues Set an Cookies und wenn sie mit älteren Cookies auf die Seite zurückkehren, funktionieren Teile der Anwendung nicht richtig, ohne die Cookies zu löschen. Ganz zu schweigen davon, dass dies eine Verletzung der Codierungsstandards ist: w3.org/Protocols/rfc2109/rfc2109, ....... "CD001", sagen wir, ich setze den Ablauftimer auf 30 Minuten, sie schließen den Browser und danach 10 Minuten, dann erinnere dich daran, dass sie vergessen haben, etwas zu holen und zurückkommen, nur um merkwürdiges Verhalten auftreten zu lassen. –

Antwort

0

Ausgehend von anderen Posts auf stackoverflow sowie die Kommentare zu meiner Frage über die Überarbeitung der App, kombinierte ich einige Beiträge, um Cookies und die Sitzungsvariablen nach 1 Stunde zu löschen.

Credit:

  • How do I expire a PHP session after 30 minutes?
  • Best way to completely destroy a session - even if the browser is not closed
  • http://php.net/manual/en/function.setcookie.php

    if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) { 
    
        if (ini_get("session.use_cookies")) { 
         $params = session_get_cookie_params(); 
         setcookie(session_name(), '', time() - 42000, 
          $params["path"], $params["domain"], 
          $params["secure"], $params["httponly"] 
         ); 
        } 
    
        if (isset($_SERVER['HTTP_COOKIE'])) { 
         $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
         foreach($cookies as $cookie) { 
          $parts = explode('=', $cookie); 
          $name = trim($parts[0]); 
          setcookie($name, '', time()-1000); 
          setcookie($name, '', time()-1000, '/'); 
         } 
        } 
    
        session_unset(); 
        session_destroy(); 
    
        echo '<script>window.location= "login.php?pre_action=session_expired";</script>'; 
    } 
    $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 
    
Verwandte Themen