多语言展示
当前在线:1276今日阅读:75今日分享:44

PHP会话保持Session方法

session是服务器保持会话数据的一种方法,对应cookie是在客户端保持用户数据。Session分以下几部分:1)Session id用户Session的唯一标识(随机生成,具有唯一性,随机性)2)Session data保存用户状态信息(用户数据)3)Session fileSession的存储方式,文件存储方式以'sess_'前缀+'Session_id'后缀的方式存储格式如下:sess_d3eom13a9r9p5i5nj923voqaf74)Session lifetimeSession生存时间(从Session的产生到生命周期的结束)
工具/原料
1

session

2

php

工作原理
Session的缺点

1)使用Session会影响系统性能(受文件系统设计影响,目录定义超过10000个文件非常耗时)2)Session文件大小1~2K,数量庞大的小文件影响硬盘IO性能

Session配置文件
1

默认配置文件的路径/etc/php.ini

2

查找配置文件find / -name php.ini

3

配置文件的参数vim编辑/etc/php.ini[Session]session.save_handler = files #session的存储方式session.use_cookies= 1 #使用cookies在客户端保存会话session.use_only_cookies = 1 #去保护URL中传送session id的用户session.name = PHPSESSID #session名称(默认PHPSESSID)session.auto_start = 0 #不启用请求自动初始化sessionsession.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 =1session.gc_divisor =1000 #建议设置1000-5000#概率=session.gc_probability/session.gc_divisor(1/1000)#页面访问越频繁概率越小session.gc_maxlifetime =1440 #过期时间(默认24分钟,单位秒)session.bug_compat_42 = off #全局初始化session变量session.bug_compat_warn = offsession.referer_check = #防止带有ID的外部URLsession.entopy_length = 0 #读取的字节session.cache_limiter = {nocache,private,pblic} #HTTP缓冲类型session.cache_expire = 180 #文档过期时间(分钟)session.use_trans_sid = 1 #trans_sid支持(默认0)session.hash_function = 0 #hash方法{0:md5(128 bits),1:SHA-1(160 bits)}session.hash_bits_per_character = 5 #当转换二进制hash数据奥可读形式是,每个字符保留位数session.save_path = '/var/lib/php/session' #session id存放路径

session的保存目录
1

默认路径:ls -l /var/lib/php/session

2

路径查找方法:find / -name session

3

配置文件自定路径grep session.save_path /etc/php.ini

session的保存方式
1

文件方式保存session.save_handler = files

2

处理器方式(如mysql)session.save_handler = user

3

开启客户端会话保存session.use_cookies = 1

Session的同步

场景:应用程序层有多台服务器,服务器之间做负载均衡,可通过如下方式解决1)Session存储于数据库2)存储于共享存储(NFS)3)负载均衡器保持会话

Session的管理脚本

删除24分钟内没有被改变的Session文件cd /var/lib/php/session; find -cmin +24 | xargs rm

内存直存Session的方法

内存直接存储Session可以改善Session存储的性能(重启丢失),设置方法如下vim编辑/etc/php.ini修改如下参数session.save_path = '/dev/shm'注:'/dev/shm'相当于内存入口

yum源安装

yum -y install wget tree

配置部分
1

tar -xf php-7.0.2.tar.bz2cd php-7.0.2/ext/sessionbash mod_files.sh /var/lib/php/session/ 2 5chown -R apache:apache /var/lib/php/session/chmod 700 -R /var/lib/php/session/

2

检查目录结构tree /var/lib/php/session/显示如下

3

检查目录权限ls -l /var/lib/php/session/

4

重启httpd服务使PHP的Session相关设置生效/etc/init.d/httpd restart

5

增加测试代码:vim编辑/var/www/www.cmdschool.org/test.php创建如下代码:test2'?>vim编辑/var/www/www.cmdschool.org/test2.php创建如下代码:

6

模拟DNS解析:notepad %SystemRoot%\System32\drivers\etc\hosts

7

建立如下映射:10.168.0.170 www.cmdschool.org

测试与检查
1

浏览器测试http://xx.xx.xx.xx/test.php

2

如上图所示:本页生成Session变量'user_name'并赋值'cmdschool.org'单击【test2】跳转页面

3

日志检查tail /var/log/httpd/error_log

4

检查生成的Session文件tree /var/lib/php/session显示如下

推荐信息