PHP会话保持Session方法
1、1)客户端与服务器糟囊建立联系
2)客户侨耻端将session id传递给服务器
3)服务器根据session id建立相应的session id文件(session id序列棍耕欠化保存,读取时反序列化)
唯一标识的方法有两种:cookie或者通过GET方式指定
1、1)使用Session会影响系统性能(受文件系统设计影响,目录定义超过10000个文件非常耗时)
2)Session文件大小1~2K,数量庞大的小文件影响硬盘IO性能
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 #不启用请求自动初始化session
session.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 =1
session.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 = off
session.referer_check = #防止带有ID的外部URL
session.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存放路径
1、默认路径:
ls -l /var/lib/php/session
2、路径查找方法:
find / -name session
3、配置文件自定路径
grep session.save_path /etc/php.ini
1、文件方式保存
session.save_handler = files
2、处理器方式(如mysql)
session.save_handler = user
3、开启客户端会话保存
session.use_cookies = 1
1、场景:应用程序层有多台服务器,服务器之间做负载均衡,可通过如下方式解决
1)Session存储于数据库
2)存储于共享存储(NFS)
3)负载均衡器保持会话
1、删除24分钟内没有被改变的Session文件
cd /var/lib/php/session; find -cmin +24 | xargs rm
1、内存直接存储Session可以改善Session存储的性能(重启丢失),设置方法如下
vim编辑/etc/php.ini
修改如下参数
session.save_path = "/dev/shm"
注:"/dev/shm"相当于内存入口
1、yum -y install wget tree

1、tar -xf php-7.0.2.tar.bz2
cd php-7.0.2/ext/session
bash mod_files.sh /var/lib/php/session/ 2 5
chown -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
创建如下代码:
<?php
session_start();
$_SESSION["user_name"]="cmdschool.org";
echo $_SESSION["user_name"];
echo " <a href=\"test2.php\">test2</a>"
?>
vim编辑/var/www/www.cmdschool.org/test2.php
创建如下代码:
<?php
session_start();
echo $_SESSION["user_name"];
?>
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
显示如下
