如何检查PHP $_SESSION会话变量中是否包含特定值
不需要使用MySQL函数,PHP原生就可以实现这个逗号分隔字符串的包含判断,根据你的场景有几种可选实现方案:
推荐方案(无判断误差)
你的会话变量是固定逗号分隔的权限值格式,最稳妥的实现是先把字符串拆分为数组,再做值匹配。这种方案不会出现「查找dummy1时把dummy11这类前缀重合的值误判为命中」的问题,全PHP版本兼容:
// 按逗号拆分字符串,同时自动清除每个值前后可能存在的空格,兼容不规范的存储格式 $accessList = array_map('trim', explode(',', $_SESSION['access'])); if (in_array('dummy1', $accessList)) { // 命中对应权限,在这里写业务逻辑即可 }
简洁写法(需确认无值重合风险)
如果你确认所有权限值不存在前缀重合的情况,可以直接用字符串查找函数,实现类似你示例里.contains的判断效果:
- PHP 8.0及以上版本直接用原生
str_contains函数即可:
if (str_contains($_SESSION['access'], 'dummy1')) { // 业务逻辑 }
- PHP 8.0以下版本可以用
strpos实现,注意判断时必须使用!== false做严格比较,避免目标值出现在字符串起始位置(索引为0)时被误判为不匹配:
if (strpos($_SESSION['access'], 'dummy1') !== false) { // 业务逻辑 }
注意:所有直接做字符串查找的写法都存在误判风险,如果后续新增权限值和已有值存在前缀重合,就会出现权限判断错误,生产环境优先选择数组拆分匹配的方案。
内容的提问来源于stack exchange,提问作者Codec737
相关产品推荐
相关产品推荐

