Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie die Sitzungsfreigabe in PHP
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.
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:
rrreeDas 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!