Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie die Sitzungsfreigabe in PHP

So implementieren Sie die Sitzungsfreigabe in PHP

(*-*)浩
(*-*)浩Original
2019-09-19 14:42:234543Durchsuche

Warum brauchen Sie Session-Sharing?

Heutzutage haben etwas größere Websites grundsätzlich mehrere Subdomains, wie zum Beispiel www.feiniu.com, search.feiniu.com, member .feiniu.com: Wenn diese Websites Benutzeranmeldeinformationen teilen müssen, müssen sie Sitzungen teilen. Voraussetzung ist natürlich, dass sie denselben primären Domänennamen haben.

So implementieren Sie die Sitzungsfreigabe in PHP

Das Sitzungsprinzip von PHP?

Der Client greift auf die PHP-Seite zu, führt session_start aus und generiert die session_id. Wir speichern die Sitzungs-ID. Auf dem Cookie wird der Sitzungsinhalt auf dem Server gespeichert.

Wenn der Client auf verschiedene Seiten zugreift, wird die Sitzungs-ID an den Server übergeben und der Sitzungsinhalt kann über die Sitzungs-ID abgerufen werden. (Empfohlenes Lernen: PHP-Programmierung vom Einstieg bis zur Beherrschung)

Der Prozess ist wie folgt, aber verschiedene Server generieren unterschiedliche Sitzungs-IDs für denselben Client, sodass verschiedene Server nicht dieselbe Sitzungs-ID-Sitzung erhalten können Inhalt.

Und die Standard-SESSION-Daten von PHP werden separat im Dateisystem dieses Servers gespeichert.

Wenn wir also die Sitzungsfreigabe lösen wollen, müssen wir zwei Probleme lösen:

Mehrere Server verwenden dieselbe Sitzungs-ID

这个比较容易解决,只要在php中设置存session_id的cookie域名为网站主域就可以
打开PHP.ini, 设置session.cookie_domain = .feiniu.com, 
当然也可以在php代码当中设置ini_set("session.cookie_domain","feiniu.com");

Mehrere Server verwenden dieselbe Sitzungs-ID, um auf denselben Sitzungsinhalt zuzugreifen

要实现这点,就必须把session内容存储到让所有服务器都能访问到的地方,php的session内容是默认存储到本服务器的文件中的,
一般的解决方案是存入数据库,memcache或者redis这种缓存服务器,当然用默认的文件存储方式也可以,用NFS统一存储。

Wie wähle ich eine Speicher-Engine aus?

Standard Dateispeicher:

这种方式的session销毁依托于php垃圾收集器,在高并发或销毁时间较长的情况下,在SESSION目录下产生大量文件,当然可以设置
分级目录进行 SESSION 文件的保存。
这会导致两个问题:第一、查找文件慢;第二,每个目录下可容纳的文件数是有限的,可能会导致新SESSION储存失败。

Datenbankspeicher:

把Session存储在数据库里可以防止Session数据被垃圾收集器删除,可以固化存储session数据。
但是用数据库来同步session,会加大数据库的IO,增加数据库的负担。而且数据库读写速度较慢,不利于session的适时同步。

Memcache-Speicher:

以这种方式来同步session,不会加大数据库的负担,并且安全性比较高,把session放到内存里面,比从文件中读取要快很多。
但是memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,
如果存储块不足,还会产生内存溢出。
那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统
效率,因为网络连接同样需要资源。

Redis-Speicher : Im Vergleich zu Memcache ist der Redis-Zugriff etwas langsamer. Die Vorteile sind:

rrree

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

Stellungnahme:
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