php教程 PHP源码 PHP网站session共享几种方案

PHP网站session共享几种方案

Jun 08, 2016 pm 05:21 PM
memcache save session

session共享问题原因于自己几个不同站之间需要实现session共享了,下面小编整理了一些session共享文章,希望对大家有帮助。

<script>ec(2);</script>

使用lvs或者nginx进行web的负载均衡时,一般都会遇到session共享的问题,因为一般PHP网站的session是以文件的形式存储于服务器本地的硬盘上。多个服务器进行负载均衡时,将会出现用户请求被分配到其他服务器上后session丢失的问题。解决方案主要有以下几个思路。

1.将session存储在共享的设备上,例如NFS等文件系统上

这种解决方案很容易实现,无需做特殊设置,将nfs目录mount至php的session存储目录即可。缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

2. 基于数据库的Session共享

首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势

3. 基于Memcache的Session共享

Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势。
另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力
 
1.首先安装memcache,以及memcache在php中的扩展
2.修改php.ini文件

 代码如下 复制代码

session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211″

使用多个 memcached server 时用逗号”,”隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,类似这样的:”tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2″

3.大功告成,重启apache和memcache看看phpinfo里的session配置是不是变成了memcache了。
4.自己的程序完全不用修改,系统已经自己去找memcache来做他的session宿主啦。
PS:如果不想整台服务器全局都是用memcache的话也可以用如下两种方法:

 代码如下 复制代码

修改 .htaccess

php_value session.save_handler “memcache”
php_value session.save_path “tcp://127.0.0.1:11211″

修改程序

ini_set(“session.save_handler”,”memcache”);
ini_set(“session.save_path”, “tcp://127.0.0.1:11211″);

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

세션 실패를 해결하는 방법 세션 실패를 해결하는 방법 Oct 18, 2023 pm 05:19 PM

세션 실패를 해결하는 방법

PHP 세션 교차 도메인 문제에 대한 솔루션 PHP 세션 교차 도메인 문제에 대한 솔루션 Oct 12, 2023 pm 03:00 PM

PHP 세션 교차 도메인 문제에 대한 솔루션

PHP 개발에 Memcache를 어떻게 사용하나요? PHP 개발에 Memcache를 어떻게 사용하나요? Nov 07, 2023 pm 12:49 PM

PHP 개발에 Memcache를 어떻게 사용하나요?

JavaScript와 PHP 쿠키의 차이점은 무엇입니까? JavaScript와 PHP 쿠키의 차이점은 무엇입니까? Sep 02, 2023 pm 12:29 PM

JavaScript와 PHP 쿠키의 차이점은 무엇입니까?

PHP 세션 도메인 간 및 AJAX 비동기 통신 최적화 PHP 세션 도메인 간 및 AJAX 비동기 통신 최적화 Oct 12, 2023 am 09:22 AM

PHP 세션 도메인 간 및 AJAX 비동기 통신 최적화

세션 실패의 이유는 무엇입니까? 세션 실패의 이유는 무엇입니까? Oct 17, 2023 pm 05:01 PM

세션 실패의 이유는 무엇입니까?

이제 유럽에서 Amazfit Helio Ring 구매 가능: 스마트워치와 함께 번들로 구매 시 €149 할인 이제 유럽에서 Amazfit Helio Ring 구매 가능: 스마트워치와 함께 번들로 구매 시 €149 할인 Jun 17, 2024 am 11:19 AM

이제 유럽에서 Amazfit Helio Ring 구매 가능: 스마트워치와 함께 번들로 구매 시 €149 할인

PHP의 세션 인증 메커니즘과 보안 최적화를 마스터하세요. PHP의 세션 인증 메커니즘과 보안 최적화를 마스터하세요. Aug 06, 2023 pm 04:17 PM

PHP의 세션 인증 메커니즘과 보안 최적화를 마스터하세요.

See all articles