大家好我已经做了研究,我似乎无法弄清楚我的代码在做什么。我知道会话变量应该改变,除非改变它们或删除它们。我不认为这个问题是特定于浏览器的后退按钮,因为当访问另一个页面时,它似乎不工作,它只是在家中工作到另一个页面,但当我访问另一个页面时,它不会似乎工作。会话变量,类和后退按钮
我正在建立一个自定义CMS(必须是自定义的,我已经思考了所有其他选项)我基本上正在做一个访问控制脚本。首先,我试图通过将会话中的用户角色或用户类型作为变量进行存储,但在按回或进入第三个页面时不起作用。该变量用于根据用户类型显示菜单链接。
这是我检查我的会议
$now=time();
if (!isset($_SESSION)) {
session_start();
}
if (!isset($_SESSION['session_user_name']) || $now - $_SESSION['session_start']>60*60){
header('Location:login.php');
exit;
}else{
//$user_name = $_SESSION['session_user_name'];
//$user_type = $_SESSION['session_user_type'];
}
require(CMS_ROOT.'/classes/acl.php');
$user_role = new ACL();
$user_type = $user_role->userRole;
这是我的ACL类
class ACL
{
var $userID = 0; //Integer : Stores the ID of the current user
var $userRole = ''; //String : Stores the roles of the current user
function __constructor($userID = '')
{
if ($userID != '')
{
$this->userID = floatval($userID);
} else {
$this->userID = floatval($_SESSION['session_user_id']);
}
$this->userRole = $this->getUserRole();
}
function ACL($userID='')
{
$this->__constructor($userID);
}
function getUserRole()
{
global $table_prefix;
$user_id = $this->userID;
$strSQL = "SELECT user_type FROM ${table_prefix}users WHERE user_id = $user_id" ;
$data = mysql_query($strSQL) or die(mysql_error());
$resp = 'null';
$row = mysql_fetch_assoc($data);
$resp = $row['user_type'];
return $resp;
}
}
,这是菜单
<nav>
<ul>
<?php echo $user_type; if($user_type == 'administrator' || $user_type == 'manager'){?>
<li><a href="<?php echo $cms_path; ?>/index.php">Home</a></li>
<? } ?>
<?php if($user_type =='administrator' || $user_type == 'manager'){?>
<li><a href="<?php echo $cms_path; ?>/users/user_view.php" >Users</a></li>
<? } ?>
<?php if($user_type == 'administrator' || $user_type == 'manager'){?>
<li><a href="<?php echo $cms_path; ?>/clients/client_view.php" >Clients</a></li>
<? } ?>
<li><a href="<?php echo $cms_path; ?>/albums/album_view.php" >Albums</a></li>
<li><a href="<?php echo $cms_path; ?>/logout.php">logout</a></li>
</ul>
</nav>
我希望有人能帮助或引导我在正确的方向。
正如一个建议,我会建议不要在这里重新发明轮子,而应该使用完善的框架(Laravel是我的最爱 - http://laravel.com/docs/5.1),并利用预先构建的用户管理库(如泄密https://github.com/Zizaco/confide)。有这么多的安全细微差别,建立一个坚实的认证系统,这些图书馆可以脱下你的盘子 –
我不明白你的问题是什么。我知道你尝试在会话中添加一个变量,但它不起作用。你序列化了吗?另外,你在评论'$ userID'是一个整数,但是在你使用'floatval()'之后的一些行是整数还是浮点数? –
@Jonathan Crowe这是一个定制的服务解决方案,所以它必须尽可能的定制。它会像wordpress一样在一个框架上构建wordpress。我们需要尽可能多地控制代码,而不能依赖于框架在可预见的将来是否处于积极的发展和支持之下,这将影响整个商业理念。 –