PHP逻辑运算符条件不生效:登录状态判断结果异常
问题分析与修复方案
你的问题出在逻辑判断的条件写反了,咱们一步步捋清楚:
需求回顾
你想要的是:
- 只要用户是登录的导师(
logged_tutor存在)或者登录的学生(logged_student存在),就显示个人资料和退出链接 - 只有当两个会话都不存在时,才显示登录和注册按钮
原代码的逻辑错误
原条件:
if( Session::exists('logged_tutor') === false OR Session::exists('logged_student') === false )
这个条件的意思是:只要其中一个会话不存在,就执行“显示登录按钮”的分支。举个例子:
- 如果用户是登录的导师(
logged_tutor存在),那Session::exists('logged_student')肯定是false,条件成立,还是会显示登录按钮——这就和你的预期完全相反了。
修复方案
有两种等价的写法,选你觉得直观的就行:
方案1:判断「两个会话都不存在」时显示登录按钮
把OR改成AND,这样只有当导师和学生都没登录时,才触发登录按钮分支:
<?php if( Session::exists('logged_tutor') === false AND Session::exists('logged_student') === false ) { // 显示登录和注册按钮 } else { // 显示个人资料和退出链接 } ?>
方案2:直接判断「任意一个会话存在」时显示个人资料
反过来写条件,先判断用户是否已登录(导师或学生),再执行对应分支:
<?php if( Session::exists('logged_tutor') === true OR Session::exists('logged_student') === true ) { // 显示个人资料和退出链接 } else { // 显示登录和注册按钮 } ?>
调试建议
你已经在用var_dump调试,可以再细化一下,分别输出两个会话的状态:
var_dump(Session::exists('logged_tutor'), Session::exists('logged_student'));
这样你能清晰看到每个会话的返回值,验证修复后的逻辑是否符合预期。
内容的提问来源于stack exchange,提问作者user8625234
相关产品推荐
相关产品推荐

