【发布时间】:2014-01-30 23:35:32
【问题描述】:
我通过 Windows 身份验证登录用户,然后将该用户的权限存储在会话变量中。我在数据库中使用分隔的权限存储方法,即:
$rights //retrieved from database
= 'read,edit,delete,admin'
所以我的问题是我应该这样做;
//generate variable
$_SESSION['userrights'] = $rights ($rights is retrieved from database)
//use strpos to find if right is allowed
if (strpos($_SESSION['userrights'],"admin") !== false) { // do the function }
或
//make array of rights
$_SESSION['userrights'] = explode(',',$rights)
//use in_array to find if right is allowed
if (in_array("admin",$_SESSION['userrights'])) { // do the function }
有点强迫症问题,因为我认为对于我正在做的事情来说差异几乎可以忽略不计,但哪种方法更快(使用更少的资源)?
除了侮辱我的权利存储方法的答案外,任何答案都值得赞赏!
【问题讨论】:
-
肯定用第二种方法。与在字符串中查找值相比,检查数组中的特定值是一种更好的方法。请注意,
in_array参数顺序是needle,haystack,而不是haystack,needle。 -
2:50AM 懒惰复制粘贴!感谢您的回答!
-
为什么不将它们作为键存储在关联数组中?这应该比任何一个都快。
-
你的意思是我可以使用 isset($_SESSION['admin']) 代替?
-
是的,或者
isset($_SESSION['userrights']['admin'])
标签: php arrays performance strpos