如何在会话中检查权限?

时间:2018-11-08 07:58:39

标签: php html session if-statement

我做了一个登录页面,该页面正常运行。我系统上的每个帐户都有一个用户名,密码和权限。在登录屏幕上,您只需填写用户名和密码,记录就会自动链接到会话,因此,请确保会话知道登录时具有的权限。我想在管理员和管理员之间进行区别用户帐号。管理员帐户应与用户重定向到其他屏幕。这是我的代码:

if ($_SESSION['Permission'] = "admin") { 
    header("location:adminmenu.html");
} else {
    header("location:usermenu.html"); 
}

运行此命令时,即使该语句不正确,它也会自动将我带到管理菜单。我该如何解决?

这是不一样的,因为问题不在于解析错误。

3 个答案:

答案 0 :(得分:0)

检查以下内容:

1。)使用比较而不是分配

if ($_SESSION['Permission'] === "admin") { 
header("location:adminmenu.html");
} else {
header("location:usermenu.html"); 
}

2。)确保对每个请求都运行session_start()

3。)确保设置了$ _SESSION ['Permission'],运行var_dump($ _ SESSION);确保该值设置正确。

答案 1 :(得分:0)

比较值时,请确保您拥有=而不是session_start();。还要查看页面顶部是否有session_start(); if ($_SESSION['Permission'] == "admin") { header("location:adminmenu.html"); } else { header("location:usermenu.html"); }

blur

答案 2 :(得分:0)

这是因为不是将其分配给$ _SESSSION ['Permision']管理值,而是将其分配给if语句。然后在if语句中,将检查“ admin” == true(在这种情况下为true)。

避免这种情况的最简单方法是将YODA Expressions与三元运算符配合使用,从而简化了代码

sudo supervisorctl reread
sudo service supervisord reload

与下面的代码相同(就结果而言)

    echo "Creating config files..."
    rm /etc/supervisor/supervisord.conf && \
    dd of=/etc/supervisor/supervisord.conf << EOF
[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/dev/stdout ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
user=root                ;

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /code/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
EOF

    echo "Starting queue..."
    exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf

还请注意isset()函数的存在,该函数会检查会话数组中是否存在权限,因为如果不选中它,则会通知不存在的索引