Heim Backend-Entwicklung PHP-Problem So legen Sie die Ablaufzeit in PHP fest

So legen Sie die Ablaufzeit in PHP fest

Nov 04, 2020 am 11:38 AM
php

So legen Sie die Ablaufzeit in PHP fest: Legen Sie zuerst die Sitzung fest und lesen Sie sie. Löschen Sie dann die Sitzung durch „unset($_SESSION[$name]);“ und geben Sie schließlich „session::get(‘test‘)“ aus. ;" ist abgelaufen. Das war's.

So legen Sie die Ablaufzeit in PHP fest

Empfohlen: „PHP-Video-Tutorial

Legen Sie die Sitzungsablaufzeit in PHP streng fest!

Beschränken Sie den Ablauf der Sitzung unbedingt auf 30 Minuten!

1. Stellen Sie die Lebensdauer des Client-Cookies auf 30 Minuten ein.

3. Fügen Sie zu jedem Sitzungswert einen Zeitstempel hinzu heißt;

Was den Grund betrifft, wollen wir zunächst die Grundprinzipien von Sitzungen in PHP verstehen:

Die standardmäßige Sitzungsgültigkeitsdauer in PHP beträgt 1440 Sekunden (24 Minuten), das heißt, wenn der Client nicht länger aktualisiert wird als 24 Minuten, läuft die aktuelle Sitzung ab. Wenn der Benutzer den Browser schließt, wird die Sitzung natürlich beendet und die Sitzung existiert natürlich nicht mehr!

Wie wir alle wissen, wird die Sitzung auf der Serverseite gespeichert, basierend auf der vom Client bereitgestellten Sitzungs-ID, und dann wird die Datei gelesen, um den Wert der Variablen zu erhalten Ein Cookie oder der

Query_String des Http1.1-Protokolls (das ist der Teil nach dem „?“ der aufgerufenen URL) wird an den Server übertragen, und dann liest der Server das Verzeichnis der Sitzung...

Zur Steuerung Um den Lebenszyklus der Sitzung zu verstehen, müssen wir zunächst die relevanten Einstellungen der Sitzung in php.ini verstehen (öffnen Sie die php.ini-Datei im Abschnitt „[Sitzung]“):

1 ist „1“, was bedeutet, dass SessionID von Query_String übergeben wird.

2: Dies ist der in SessionID gespeicherte Variablenname ist „PHPSESSID“;

3. Dies ist die Zeit, in der die SessionID im Client-Cookie gespeichert wird Aus diesem Grund kann die Session nicht dauerhaft genutzt werden!

4. session.gc_maxlifetime: Dies ist die Zeit, die Sitzungsdaten auf der Serverseite gespeichert werden. Wenn diese Zeit überschritten wird, werden die Sitzungsdaten automatisch gelöscht!

Es gibt noch viele weitere Einstellungen, aber diese beziehen sich auf diesen Artikel. Beginnen wir mit der Festlegung des Sitzungsüberlebenszyklus.

Wie bereits erwähnt, liest der Server Sitzungsdaten über die Sitzungs-ID, aber im Allgemeinen ist die vom Browser gesendete Sitzungs-ID nach dem Schließen des Browsers verschwunden, sodass wir die Sitzungs-ID nur manuell festlegen und speichern müssen, nein ...

Wenn Sie haben die Betriebsberechtigung des Servers, dann ist die Einstellung sehr, sehr einfach. Sie müssen nur die folgenden Schritte ausführen:

1. Setzen Sie „session.use_cookies“ auf 1 und verwenden Sie Cookie, um die Sitzungs-ID zu speichern 1, im Allgemeinen keine Änderung erforderlich;

2. Ändern Sie „session.cookie_lifetime“ auf die Zeit, die Sie einstellen müssen (z. B. eine Stunde, Sie können sie auf 3600 einstellen,

3). .gc_maxlifetime“ zu und Die gleiche Zeit wie „session.cookie_lifetime“;

In der PHP-Dokumentation wird eindeutig angegeben, dass der Parameter zum Festlegen der Sitzungsgültigkeitsdauer session.gc_maxlifetime ist. Dieser Parameter kann in der Datei php.ini oder über die Funktion ini_set() geändert werden. Das Problem besteht darin, dass die Änderung dieses

-Parameters nach vielen Tests grundsätzlich keine Auswirkung hat und die Gültigkeitsdauer der Sitzung weiterhin den Standardwert von 24 Minuten beibehält.

Aufgrund des Arbeitsmechanismus von PHP gibt es keinen Daemon-Thread, um Sitzungsinformationen regelmäßig zu scannen und festzustellen, ob sie ungültig sind. Wenn eine gültige Anfrage auftritt, entscheidet PHP basierend auf dem Wert der globalen Variablen

session.gc_probability/session.gc_divisor (die auch über php.ini oder ini_set() geändert werden kann) ob ein GC (Garbage Collector) gestartet wird. Funktion).

Standardmäßig ist session.gc_probability = 1, session.gc_divisor = 100, was bedeutet, dass die Wahrscheinlichkeit, dass GC gestartet wird, bei 1 % liegt. Die Aufgabe des GC besteht darin, alle Sitzungsinformationen zu scannen, das letzte Änderungsdatum der Sitzung von der aktuellen Zeit zu subtrahieren und es mit dem Parameter session.gc_maxlifetime zu vergleichen. Wenn die Überlebenszeit gc_maxlifetime überschritten hat, wird die Sitzung gelöscht.

Bis jetzt funktioniert alles bestens. Warum wird gc_maxlifetime ungültig?

Standardmäßig werden Sitzungsinformationen in Form von Textdateien im temporären Dateiverzeichnis des Systems gespeichert. Unter Linux ist dieser Pfad normalerweise \tmp und unter Windows normalerweise C:\Windows\Temp. Wenn mehrere PHP-Anwendungen auf dem Server vorhanden sind, speichern diese ihre Sitzungsdateien im selben Verzeichnis. Ebenso starten diese PHP-Anwendungen mit einer bestimmten Wahrscheinlichkeit auch GC und scannen alle Sitzungsdateien.

Das Problem besteht darin, dass GC beim Betrieb nicht zwischen Sitzungen auf verschiedenen Websites unterscheidet. Beispielsweise ist gc_maxlifetime für Standort A auf 2 Stunden und gc_maxlifetime für Standort B auf den Standardwert von 24 Minuten festgelegt. Wenn der GC von Site B startet, wird er gescannt

Scannen Sie das öffentliche temporäre Dateiverzeichnis und löschen Sie alle Sitzungsdateien, die älter als 24 Minuten sind, unabhängig davon, ob sie von Site A oder B stammen. Auf diese Weise ist die gc_maxlifetime-Einstellung von Site A nutzlos.

Sobald Sie das Problem gefunden haben, ist es einfach, es zu lösen. Ändern Sie den Parameter session.save_path oder verwenden Sie die Funktion session_save_path(), um das Verzeichnis, in dem die Sitzung gespeichert wird, auf ein dediziertes Verzeichnis zu verweisen. Der Parameter gc_maxlifetime funktioniert normal.

Ein weiteres Problem besteht darin, dass gc_maxlifetime nur die kürzeste Überlebenszeit der Sitzung garantieren kann und nicht gespeichert werden kann. Nach dieser Zeit werden die Sitzungsinformationen sofort gelöscht. Da GC auf Wahrscheinlichkeitsbasis gestartet wird, kann es sein, dass es über einen längeren Zeitraum nicht gestartet wird, sodass eine große Anzahl von Sitzungen auch nach Überschreiten von gc_maxlifetime noch gültig ist.

Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Wahrscheinlichkeit von session.gc_probability/session.gc_divisor zu erhöhen. Wenn es zu 100 % erwähnt wird, wird dieses Problem vollständig gelöst, aber es wird offensichtlich schwerwiegende Auswirkungen auf die Leistung haben. Eine andere Methode besteht darin, es selbst zu implementieren

nur mit PHP, eine Sitzungsklasse zu erstellen und die Ablaufzeit beim Schreiben der Sitzung zu schreiben. Stellen Sie beim Lesen anhand der Ablaufzeit fest, ob es abgelaufen ist.

class Session{  
      
        /** 
         * 设置session 
         * @param String $name   session name 
         * @param Mixed  $data   session data 
         * @param Int    $expire 超时时间(秒) 
         */  
        public static function set($name, $data, $expire=600){  
            $session_data = array();  
            $session_data['data'] = $data;  
            $session_data['expire'] = time()+$expire;  
            $_SESSION[$name] = $session_data;  
        }  
      
        /** 
         * 读取session 
         * @param  String $name  session name 
         * @return Mixed 
         */  
        public static function get($name){  
            if(isset($_SESSION[$name])){  
                if($_SESSION[$name]['expire']>time()){  
                    return $_SESSION[$name]['data'];  
                }else{  
                    self::clear($name);  
                }  
            }  
            return false;  
        }  
      
        /** 
         * 清除session 
         * @param  String  $name  session name 
         */  
        private static function clear($name){  
            unset($_SESSION[$name]);  
        }  
      
    }  
    demo.php  
      
    session_start();  
      
    $data = '123456';  
    session::set('test', $data, 10);  
    echo session::get('test'); // 未过期,输出  
    sleep(10);  
    echo session::get('test'); // 已过期
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo legen Sie die Ablaufzeit in PHP fest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles