OVH共享服务器下PHP Session自定义存储目录失效问题求助
我之前在OVH的共享主机上也碰到过几乎一模一样的session存储问题,给你几个实际可行的排查和解决方向:
先排查OVH的PHP配置限制:
OVH的共享服务器大概率会锁定session.save_path的代码修改权限,你可以先创建一个phpinfo.php文件,内容如下:<?php phpinfo(); ?>访问这个文件后,找到
session.save_path这一项,查看Local Value和Master Value。如果Local Value始终和Master Value一致,说明代码层面的修改被主机拦截了,这时候你需要通过OVH的控制面板去修改PHP配置,或者联系客服开启自定义session路径的权限。权限别只盯着777:
共享主机环境下,777权限反而可能触发PHP的安全机制(比如open_basedir、suEXEC)导致拒绝写入。建议把sessions文件夹的权限改成755,然后确认文件夹的所有者和网站运行的PHP用户一致(可以在phpinfo里找USER或SERVER_USER字段)。如果自己没法修改所有者,直接找OVH的技术支持帮忙调整。检查session_start()前的隐形输出:
哪怕你代码里是先设置路径再启动session,但如果文件有隐形输出(比如UTF-8 BOM头、代码开头的空格/换行),会导致session_start()无法正常执行,自然不会生成session文件。你可以在代码最开头加上ob_start();开启输出缓冲,或者把文件转成UTF-8无BOM格式再测试。验证session是否真的启动成功:
别只看session_id,加一行代码测试session状态:var_dump(session_status());正常启动的话会返回
int(2)(对应PHP_SESSION_ACTIVE)。如果返回int(1)(PHP_SESSION_NONE),说明session根本没启动起来,得先解决启动问题。尝试用.user.ini配置文件修改:
很多共享主机支持通过.user.ini文件来覆盖PHP配置,你可以在网站根目录创建这个文件,写入:session.save_path = "/home/expressptp/sessions"然后去OVH控制面板重启PHP服务,再测试session存储是否正常。
内容的提问来源于stack exchange,提问作者ronida

