我正在使用基于数据库的PHP SessionHandlerInterface
实现。
该实现在我的本地安装上完美运行,但我的提供商网站空间上的会话cookie存在问题:
后续的客户端到服务器请求(获取一些css和js文件)发送带有会话ID的cookie,收到的第一个(登录)请求(如chrome和firefox的开发人员工具中所示)似乎没有任何服务器上的会话cookie信息 - COOKIE['sessionName']
未设置。
因此,这些资源无法正确加载,因为它们仅在用户登录时才可用 - 在第一次登录请求后应该是什么。
这些是我使用的ini-settings:
ini_set('session.auto_start', 0);
ini_set('session.entropy_file', '/dev/urandom');
ini_set('session.entropy_length', '256');
ini_set('session.gc_maxlifetime', 1440;
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 10);
ini_set('session.hash_bits_per_character', '5');
ini_set('session.hash_function', 'sha256');
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_trans_sid', '0');
之前调用session_start()
的做法是:
session_name('sid');
session_set_save_handler($this, true);
session_set_cookie_params(3600, '/', $_SERVER['SERVER_NAME'], isset($_SERVER['HTTPS']), true);
register_shutdown_function('session_write_close');
这种问题可能是什么原因 - 会话cookie如何在从客户端到服务器的途中消失?