> 백엔드 개발 > PHP 튜토리얼 > php中的session性能问题

php中的session性能问题

PHPz
풀어 주다: 2018-10-08 09:15:06
앞으로
1026명이 탐색했습니다.

默认情况下开启PHP会话,会在服务器端创建一个sess_PHPSESSID文件,返回一个名为PHPSESSID的cookie给浏览器.PHP操作$_SESSION数组添加和访问会话数据.

PHP同一个会话之间共享同一个对象实例:
object通过serialize序列化成string,然后保存到会话变量中:
$_SESSION['object'] = serialize($object);
在使用这个会话(PHPSESSID)发出的其他http请求通过反序列化获取对象:
$object = unserialize($_SESSION['object']);
当然,数组也一样可以这样存储到一个会话变量中,非常方便有木有.

PHP会话存储默认使用files,对应php.ini配置项session.save_handler=files
存储位置默认是/tmp,对应session.save_path=/tmp

如果你觉得用文件系统保存会话文件会造成磁盘I/O过大,你完全可以用Memcache/Redis来存储会话.
PECL扩展memcache和redis都提供了session处理器,用于存储PHP会话内容.
http://pecl.php.net/package/memcache
http://php.net/manual/zh/memcache.ini.php
http://pecl.php.net/package/redis

Ubuntu可以这样安装:
sudo apt-get install memcached redis-server
sudo apt-get install php5-memcache php5-redis
pear install pecl/memcache

配置php.ini,加入:
extension=memcache.so
extension=redis.so
再把
session.save_handler = files
session.save_path = "/tmp"
改为(memcache):
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
改为(redis):
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

session.save_path中多台memcache/redis服务器可以用逗号隔开.

session.save_path里的URL还可以可以包含一些参数,比如memcache的persistent,weight,timeout,retry_interval.

不能说PHP的session性能很烂,而是说计算机的io效率不高!

PHP默认session是以文件形式保存在本地文件系统中,每次访问都是做io操作,并发大的时候,必然会导致session文件爆发,导致读取文件变慢。

换一种方式,将session保存到内存或者数据库,性能会提高。

php session原理就这么简单,只看你运用了。

至于说cookie代替session就会提高,那是没什么依据的。cookie数据量有限制,而且cookie数据量大了以后,直接消耗你的带宽流量。

现在都是把session保存到memcached中

更多相关教程请访问   php编程从入门到精通全套视频教程

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿