Heim Backend-Entwicklung PHP-Problem Detailliertes Verständnis der Sitzung

Detailliertes Verständnis der Sitzung

Aug 20, 2019 pm 02:23 PM
session

1. Was ist Sitzung?

Die offizielle Definition von Sitzung lautet: Sitzung: In Computern, insbesondere in Netzwerkanwendungen, wird dies als „Sitzungssteuerung“ bezeichnet. Das Session-Objekt speichert die Eigenschaften und Konfigurationsinformationen, die für eine bestimmte Benutzersitzung erforderlich sind.

Um es ganz klar auszudrücken: Sitzung ist eine Datenspeichertechnologie, die die Serverseite warten kann. Die Sitzung weist hauptsächlich die folgenden Merkmale auf:

1. Die Sitzung wird auf der Serverseite gespeichert

2. Die Sitzung wird im Allgemeinen mit Cookies verwendet. Wenn der Browser die Cookie-Funktion deaktiviert hat, bedeutet dies, dass Sie können URL-Rewriting nur verwenden, um die Sitzungsspeicherfunktion zu implementieren

3. Wenn Sie die Sitzung lediglich zur Aufrechterhaltung des Benutzerstatus verwenden, dann, wenn eine große Anzahl von Benutzern gleichzeitig angemeldet ist oder dort sind viele Die Anzahl der Sitzungen verursacht das Problem einer langsamen Abfrage

Im Wesentlichen: Sitzungstechnologie ist eine Technologie zum vorübergehenden Speichern von Daten basierend auf dem Backend, das sich von der Datenbank unterscheidet

2 . Warum gibt es eine Sitzung?

Einer der Hauptgründe ist die Zustandslosigkeit von HTTP

Aufgrund der Zustandslosigkeit von HTTP haben wir keine Möglichkeit, den Status des aktuellen Benutzers zu ermitteln HTTP sendet eine Anfrage. Zum Beispiel Informationen darüber, um welchen Benutzer es sich derzeit handelt. Daher benötigen wir zu diesem Zeitpunkt eine Sitzung, um den aktuellen Status zu ermitteln

3. Funktionsweise der Sitzung

Lassen Sie uns zunächst das Prinzip der Sitzung anhand eines Flussdiagramms verstehen, das die Benutzeranmeldung simuliert. Gehen wir davon aus, dass der Benutzer zu diesem Zeitpunkt einen Anmeldevorgang durchführt:

Detailliertes Verständnis der Sitzung

Der gesamte Prozess gliedert sich grob in die folgenden Schritte:

1. Der erste Schritt besteht darin, die Sitzungs-ID, den Benutzernamen und das Passwort im lokalen Cookie in den Hintergrund zu bringen

2. Der Hintergrund erkennt, ob eine entsprechende Sitzungskennung vorhanden ist, und prüft dann, ob die entsprechende PHPSESSID empfangen wird

3 wird direkt generiert. Wenn ja, prüfen Sie, ob die entsprechende Datei vorhanden und gültig ist

3. Wenn sie ungültig ist, müssen wir die Sitzung löschen und eine neue Sitzung erstellen. Nicht ungültig, verwenden Sie die aktuelle Sitzung

Wenn Sie hier sehen, haben Sie möglicherweise ein vorläufiges Verständnis des Funktionsprinzips der Sitzung

Das schematische Diagramm der Sitzung ist wie folgt:

Detailliertes Verständnis der Sitzung

4. Allgemeine Sitzungskonfiguration

Hier nehmen wir PHP als Beispiel, um die Konfiguration der Sitzung zu erklären

Zuerst Wir müssen PHP konfigurieren. Suchen Sie die Datei php.ini im Installationsverzeichnis. Die Hauptfunktion dieser Datei besteht darin, etwas PHP zu konfigurieren, was später ausführlich besprochen wird.

1. Legen Sie den im Cookie identifizierten Feldnamen fest, wenn die Sitzung gespeichert wird. Der Standardwert in PHP ist PHPSESSID

und die entsprechende Einstellung ist: session.name = PHPSESSID

2. Wenn Cookies auf dem Client deaktiviert sind, können Sie die Interaktionsmethode des Logos von Cookie auf URL-Übermittlung ändern, indem Sie session.use_trans_sid festlegen. Die entsprechende Einstellung lautet:

session.use_trans_sid = 0 3. Sitzungsspeicherposition einrichten

Die entsprechende Einstellung ist

session.save_path="D:phpStudyPHPTutorialtmptmp"

5. Sitzungsübung in PHP

Zuerst müssen wir Installieren Sie

oder

, die spezifische Methode ist auf Baidu wampphpstudy Um die Änderungen in der Sitzungsdatei leicht beobachten zu können, müssen wir den Speicherpfad der Sitzung finden (finden Sie

in php .ini) wie folgt:

session.save_path

Detailliertes Verständnis der Sitzung Suchen Sie dann das Verzeichnis, auf das verwiesen wird. Beachten Sie, dass die Sitzung im Allgemeinen in Form von Dateien gespeichert wird, wir sie jedoch auch entsprechend ändern können unsere tatsächliche Situation. Wir können es in der Datei php.ini ändern und anzeigen.

Detailliertes Verständnis der Sitzung Der erste Schritt zur Verwendung der Sitzung besteht darin, die Sitzung zu öffnen,

zu verwenden und dann der erstellten Sitzung eine Variable hinzuzufügen. Wir gehen davon aus, dass es sich um Demo1 handelt , der Wert ist Standard, der Code lautet wie folgt:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default";
?>
Nach dem Login kopieren
session_start()Der Ausführungseffekt ist wie folgt:


Detailliertes Verständnis der SitzungÖffnen Sie die entsprechende Datei Der darin enthaltene Inhalt lautet wie folgt:

Detailliertes Verständnis der Sitzungs:7 stellt einen String-Typ vom Typ String mit einer Länge von 7 Zeichen dar

Wenn wir den Inhalt erneut bearbeiten In der Sitzung wird der Effekt wie folgt sein:

我们观察最近一条的修改日期,我们可以发现就是日期发生了变化,但是文件名没有变化,也就是说,修改session中的内容不会导致文件被新建,而是执行对文件的重新写入操作

session的销毁

销毁session一般有两种方式,unsetsession_destroy,我们先来说说第一种

代码如下:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default_1";
//session的销毁
unset($_SESSION);
?>
Nach dem Login kopieren

这一个相当于没有删除session文件,但是使得即使有对应的PHPSESSID也无法获取到相应的session

session_destroy()相对来说比较彻底,直接删除对应的session文件

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default_1";
var_dump(session_name());
//session的销毁
session_destroy();
?>
Nach dem Login kopieren

Detailliertes Verständnis der Sitzung

对于个人来说比较推荐使用第二种方法,因为当要销毁session的时候,那么也就意味着session已经失效了,所以这个时候我们把它给删掉才是最好的处理方式,一方面可以减少对硬盘的存储,另外一方面可以相对优化session的查询速度。

好了,这个时候我们应该要设置传递给浏览器端的cookie了,默认是自动传送,但是我们应该要学习的是怎样通过后端设置cookie过去

其中有两个方法与session有关的方法我们需要记住,第一个是session_name(),这个是获取cookie的key值得,第二个是session_id,这个是session的文件名

设置的示例代码:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
$_SESSION["demo1"] = "default_1";
setCookie(session_name(),session_id(),time()-1000);
?>
Nach dem Login kopieren

在设置cookie的时候,我们为了程序的安全性,我们应该要禁止JS可以对cookie进行重写,所以需要设置HTTP ONLY,具体的设置方法在Php.ini中找到session.cookie_httponly

然后将其的值设置为1或者true即可

除此之外还可以通过setCookieini_set()来动态设置HTTPONLY属性

在使用session的时候,虽然会从浏览器把PHPSESSID传给后端,但是这个课程不需要人为的去参与。我们只需要保证HTTPONLY被设置就行了。下面是完整的代码:

<?php
/**
 * Created by PhpStorm.
 * Date: 2017/12/16
 */
session_start();// 打开session
if ($_SESSION) {
    var_dump($_SESSION["demo1"]);
} else {
    $_SESSION["demo1"] = "default_" . time();
    var_dump($_SESSION["demo1"]);
    setCookie(session_name(), session_id(), time(), NULL, NULL, NULL, true);
}

?>
Nach dem Login kopieren

6、session的相关注意事项

 1. 关闭浏览器session同样存在

 如果我们没有人为的去设置cookie的生命周期的时候默认关闭浏览器session的状态是无法被保存下来的,因为没有设置cookie的生命周期,默认这个时候cookie为session cookie也就是在会话存在的时候cookie才有效,所以关闭浏览器cookie失效,导致后端拿不到对应的PHPSESSID,所以无法找到对应的session文件

2.  session性能瓶颈怎样解决?

如果是后端存在大量的session的时候,那么这个时候就会出现性能的瓶颈,例如:当后端同时存在有5000个session文件的时候,假设要找的文件是在第4999个,那么也就是说前面至少需要遍历4998次,这样就会浪费过多的时间在后端的循环遍历查找文件中,所以这个时候最有效的方法是使用redis或者mongodb,原理是通过将原本保存在本地的session文件写入到内存中,通过内存换空间的形式来达到提升速度

3. 一般不使用URL重写的方法来传递PHPSESSID

其中主要有两个原因,一个是URL重写方式传递的话会导致URL混乱,影响美观。另一个是增大了用户误操作的几率

更多的session的相关配置请点击这里

7、更多的一些PHP.in中的session含义

[Session]

session.save_handler =的存储方式

session.use_cookies= 1 #使用cookies在客户端保存会话

session.use_only_cookies = 1 #去保护URL中传送session id的用户

session.name = PHPSESSID #session名称(默认PHPSESSID)

session.auto_start = 0 #不启用请求自动初始化session

session.cookie_lifetime = 0 #cookie存活时间(0为直至浏览器重启,单位秒)

session.cookie_path = / #cookie的有效路径

session.cookie_domain = #cookie的有效域名

session.cookie_httponly = #httponly标记增加到cookie上(脚本语言无法抓取)

session.serialize_handler = php #PHP标准序列化

session.gc_probability =1

session.gc_divisor =1000 #建议设置1000-5000

#概率=session.gc_probability/session.gc_divisor(1/1000)

#页面访问越频繁概率越小

session.gc_maxlifetime =1440 #过期时间(默认24分钟,单位秒)

session.bug_compat_42 = aus #Globale Initialisierungssitzungsvariable

session.bug_compat_warn = aus

session.referer_check = #Externe URLs mit IDs verhindern

session.entopy_length = 0 #Bytes lesen

session.cache_limiter = {nocache,private,pblic} #HTTP-Puffertyp

session.cache_expire = 180 #Dokumentablaufzeit (Minuten)

session.use_trans_sid = 1 #trans_sid-Unterstützung (Standard 0)

session.hash_function = 0 #Hash-Methode {0:md5(128 Bits),1:SHA-1(160 Bits)}

session.hash_bits_per_character = 5 #Beim Konvertieren binärer Hash-Daten in lesbare Form beträgt die Anzahl der für jedes Zeichen reservierten Ziffern

session.save_path = "/var/lib/php/session" #Sitzungs-ID-Speicherpfad

Das Obige ist eine detaillierte Erklärung der Sitzung. Für weitere verwandte Fragen besuchen Sie bitte die chinesische PHP-Website: https://www.php.cn/

Das obige ist der detaillierte Inhalt vonDetailliertes Verständnis der Sitzung. 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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

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)

So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest May 15, 2023 pm 02:37 PM

Das Problem wurde im Springboot-Projekt-Produktions-Session-Out-Timeout gefunden: In der Testumgebung wurde der Session-Out durch Ändern der application.yaml konfiguriert, nachdem die Session-Out-Konfiguration überprüft wurde In Kraft trat, wurde die Ablaufzeit für die Veröffentlichung in der Produktionsumgebung direkt auf 8 Stunden festgelegt. Allerdings habe ich am Mittag die Rückmeldung von Kunden erhalten, dass die Projektablaufzeit kurz eingestellt wurde. Wenn eine halbe Stunde lang keine Aktion ausgeführt wird, läuft die Sitzung ab und erfordert wiederholte Anmeldungen. Lösen Sie das Problem der Handhabung der Entwicklungsumgebung: Das Springboot-Projekt verfügt über integriertes Tomcat, sodass der in application.yaml im Projekt konfigurierte Sitzungsausgang wirksam ist. Produktionsumgebung: Die Produktionsumgebung ist freigegeben

So beheben Sie Sitzungsfehler So beheben Sie Sitzungsfehler Oct 18, 2023 pm 05:19 PM

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Lösung für das domänenübergreifende Problem der PHP-Sitzung Lösung für das domänenübergreifende Problem der PHP-Sitzung Oct 12, 2023 pm 03:00 PM

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Jan 18, 2023 pm 01:39 PM

Lösung für das Problem, dass die PHP-Sitzung nach der Aktualisierung verschwindet: 1. Öffnen Sie die Sitzung über „session_start();“ 2. Schreiben Sie alle öffentlichen Konfigurationen in eine PHP-Datei 3. Der Variablenname darf nicht mit dem Array-Index identisch sein; 4. Überprüfen Sie einfach den Speicherpfad der Sitzungsdaten in phpinfo und prüfen Sie, ob die Sitzung im Dateiverzeichnis erfolgreich gespeichert wurde.

Was ist die Standardablaufzeit von Session PHP? Was ist die Standardablaufzeit von Session PHP? Nov 01, 2022 am 09:14 AM

Die Standardablaufzeit der Sitzungs-PHP beträgt 1440 Sekunden, also 24 Minuten. Das heißt, wenn der Client länger als 24 Minuten nicht aktualisiert wird, läuft die aktuelle Sitzung ab, wenn der Benutzer den Browser schließt Die Sitzung wird nicht mehr existieren.

So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist May 22, 2023 pm 01:49 PM

Problem: Heute ist in unserem Projekt ein Zeitüberschreitungsproblem aufgetreten, und Änderungen an den application.properties von SpringBoot2 wurden nie wirksam. Lösung: Die server.*-Eigenschaften werden verwendet, um den eingebetteten Container zu steuern, der von SpringBoot verwendet wird. SpringBoot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Eigenschaften, um den kontrollierten Servlet-Container (Tomcat, Jetty usw.) zu konfigurieren. Wenn die Anwendung als WAR-Datei auf einer Tomcat-Instanz bereitgestellt wird, gelten die server.*-Eigenschaften nicht. Sie gelten nicht,

Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Sep 02, 2023 pm 12:29 PM

JavaScript-Cookies Die Verwendung von JavaScript-Cookies ist die effektivste Möglichkeit, Präferenzen, Käufe, Provisionen und andere Informationen zu speichern und zu verfolgen. Informationen, die für ein besseres Besuchererlebnis oder Website-Statistiken benötigt werden. PHPCookieCookies sind Textdateien, die auf Client-Computern gespeichert und zu Nachverfolgungszwecken aufbewahrt werden. PHP unterstützt transparent HTTP-Cookies. Wie funktionieren JavaScript-Cookies? Ihr Server sendet einige Daten in Form eines Cookies an den Browser Ihres Besuchers. Browser können Cookies akzeptieren. Falls vorhanden, wird es als reiner Textdatensatz auf der Festplatte des Besuchers gespeichert. Wenn ein Besucher nun eine andere Seite der Website erreicht

So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen Jun 03, 2023 pm 03:11 PM

1. Implementieren der SMS-Anmeldung basierend auf der Sitzung 1.1 Ablaufdiagramm der SMS-Anmeldung 1.2 Implementieren des Sendens eines SMS-Bestätigungscodes Beschreibung der Front-End-Anfrage: Beschreibung der Anfragemethode POST-Anfragepfad/Benutzer/Code-Anfrageparameter Telefon (Telefonnummer) Rückgabewert Keine Back-End-Schnittstelle Implementierung: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Überprüfen Sie die Mobiltelefonnummer, wenn

See all articles