今天在学习php的session功能使用的时候,出现了个小问题,程序在本地测试完全正常,但是一发布到服务器上就保存不了session。经过百度搜索得知,原来是session存储目录的问题,下面就让我们一起来看看具体的情况是怎么样的。
本机的测试环境是windows 8.1 + nginx 1.11.8 + php 7.1
服务器环境是centos 7 + nginx 1.11.8 + php-fpm 2.4 + php 5.4.16
产生的问题:本机测试session设置后,跳转到另一个页面,然后读取session
正常情况:可以正确的读取到session的值
异常情况:读取不到session的值,且判断出该session并不存在,说明session没有保存成功
解决思路:先在服务器上使用phpinfo()查看session的保存目录
从上图可以看到session的默认保存目录是/var/lib/php/session,然后我们打开php.ini配置文件(linux下我的配置文件在/etc/php.ini),打开后找到session.save_path配置,结果发现这个配置是session.save_path = "/tmp"
这就奇怪了,为什么配置文件里面是/tmp目录,而phpinfo里面显示的又是/var/lib/php/session呢?经过百度的搜索,终于查到了答案,原来是php-fpm的问题。
打开php-fpm的配置文件/etc/php-fpm.d/www.conf可以看到里面有一个配置项
原来是php-fpm里面设置了session的保存目录,难怪了。那么现在知道了session的默认目录在哪里设置了,但是还没有解决无法保存session的问题啊?
下面我们进入到/var/lib/php/session看看。
咦,提示目录不存在。难怪保存不了session了。下面我们新建一个session目录
mkdir session
再试。。结果提示没有权限,那下面问题就简单了吧。直接给session目录赋值777
chmod -R 777 *
然后再试。。搞定了。。可以正常保存session的值了。
下面我们来总结一下今天搞了什么问题:
1、找出了session默认目录在哪里修改
2、解决了session无法保存的原因和解决方法
ok
mjj通道