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

Detailliertes Verständnis der Sitzung

王林
Freigeben: 2023-02-23 10:12:02
nach vorne
3463 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:cnblogs.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage