PHP Session页面间中断:管理员登录后无法进入仪表盘排查
目标页面未正确初始化Session
跳转后的category_master.php必须在代码最开头调用session_start();,且确保这行代码之前没有任何输出(包括空格、HTML标签、echo内容)——如果有输出会触发headers already sent错误,间接导致Session无法读取。检查该页面的启动逻辑,确认Session初始化步骤正确。Session Cookie作用域限制
默认Session Cookie的path可能仅限定在当前目录,导致跳转后无法携带Session ID。可以手动配置Cookie参数,确保全站可用:session_set_cookie_params([ 'lifetime' => 0, 'path' => '/', 'domain' => $_SERVER['HTTP_HOST'], 'secure' => isset($_SERVER['HTTPS']), 'httponly' => true, 'samesite' => 'Lax' ]); session_start();将这段代码放在登录页和目标页的
session_start();之前。Session文件权限异常
虽然/tmp下生成了Session文件,但PHP进程可能没有读取权限。执行命令查看文件权限:ls -l /tmp/sess_*确保文件所有者为PHP运行用户(如www-data),权限至少为600。若权限不符,可修改php.ini中
session.save_path指向PHP有权限的目录,或手动调整/tmp目录权限。登录逻辑的隐性问题
代码中直接拼接SQL语句存在注入风险,若get_safe_value转义不彻底,可能导致查询结果异常(看似登录成功但实际Session状态异常)。建议改用预处理语句:$stmt = mysqli_prepare($con, "select * from adminlogin where username=? and password=?"); mysqli_stmt_bind_param($stmt, "ss", $username, $password); mysqli_stmt_execute($stmt); $res = mysqli_stmt_get_result($stmt); $count = mysqli_num_rows($res);另外,绝对不要明文存储密码,应使用
password_hash()加密,登录时用password_verify()验证,这也能避免字符编码导致的密码匹配异常。浏览器Cookie限制
检查浏览器是否禁用Cookie,或开启了隐私模式(部分隐私模式会限制同域Cookie传递)。尝试用普通模式访问,或清除浏览器缓存和Cookie后重试。PHP配置参数异常
检查php.ini中以下Session相关参数:session.use_cookies:需设置为On,否则Session ID无法通过Cookie传递session.cookie_secure:若网站使用HTTPS,需设置为On,否则Cookie可能不被发送session.gc_maxlifetime:若值过短,Session可能被快速回收(刚创建就中断的话此可能性较低)
内容的提问来源于stack exchange,提问作者Sumit Bera

