我有一个包含用户类型和页面的表,例如
页面用户类型
index.php 1
index.php 2
test.php 1
以便只有特定的用户类型才能看到页面。我想把它放在我的header.php文件中,这样浏览器就会检查该用户是否有权查看页面,如果没有,就会把他们带回登录屏幕。
当用户登录时,用户类型存储在会话变量中。
我将以下内容放在header.php中,这样它就可以通过include进入每个页面,但它总是允许他们查看页面,无论他们有什么权限。未登录和超时部分正在工作,但权限部分没有。
<?php
session_start();
include'connect_db.php';
# Redirect if not logged in.
if ( !isset( $_SESSION[ 'userid' ] ) ) { require ( 'login_tools.php' ) ; load() ; }
if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) {
//redirect to login.php
header('Location:login.php');
} else{ //if we haven't expired:
$_SESSION['last_activity'] = time();
}
# check for permissions
$q = "SELECT usertypeid, page FROM permissions WHERE usertypeid='$_SESSION[ 'usertypeid' ]' AND page=basename( $_SERVER['PHP_SELF'] )" ;
$r = mysqli_query ( $dbc, $q ) ;
if( @mysqli_num_rows( $r ) == 1 ) {//permission in table
$_SESSION['last_page'] = $_SESSION['current_page'];
} else{ //permission not in table
header('Location:login.php');
}
您的mysql查询出现语法错误。
$q = "SELECT usertypeid, page FROM permissions WHERE usertypeid='$_SESSION[ 'usertypeid' ]' AND page=basename( $_SERVER['PHP_SELF'] )" ;
应该是
$q = "SELECT usertypeid, page FROM permissions WHERE usertypeid='".$_SESSION[ 'usertypeid' ]."' AND page='".basename( $_SERVER['PHP_SELF'] )."';";