1.管理员权限控制技术
难点:如何才能防止用户越过表单登录到后台管理界面
解决:为了体现越过表单的可行性,笔者在编写的网站程序,故意将SESSION变量写到控制器中,这样任何一个用户都可以登录到网站的后台管理界面。但是用户仍然不能进行任何操作。单击任何一个链接按钮都会弹出错误提示,比如“您没有操作权限,4秒后自动跳转,如未跳转,请单击这里”。
ThinkPHP中常用的SESSION操作分以下几种:
get(name) // 获取SESSION值
set(name,value) // 设置SESSION的值
is_set(name) // 检查SESSION的值是否设置
clear() // 清空SESSION
destroy() // 销毁SESSION
表单HTML代码如下:
<form action="__URL__/adminManager" method="post">
<b>管理员:</b><input class="inOne" type="text" name="text" />
<b>密 码:</b><input class="inOne" type="password" name="pwd" /><br /><br />
<input class="inTwo" type="submit" name="sub" value="提交" />
<input class="inThree" type="reset" value="重置" />
</form>
Home模块/Index控制器/adminManager方法关键代码如下:
public function adminManager(){
$username = I('text'); // 接收表单传递过来的参数
$userpwd = I('pwd');
define(PHP,'_php'); // 定义一个常量PHP
// 将接收到的页面数据进行MD5加密处理
$username = md5($username.PHP);
$userpwd = md5($userpwd.PHP);
echo $username.'<br />';
echo $userpwd.'<br />';
$user = M('admin'); // 实例化基础模型类
// 取得数据表中的指定字段
$user = $user->field('user,pwd')->select();
// dump($user);
// 判断数据表中的数据与加密后的数据是否相等
if($username == $user[0]['user'] && $userpwd == $user[0]['pwd']){
$this->assign('hint','登录成功');
$this->assign('url','__URL__/adminIndex');
// 设置SESSION变量
session('PHP','phper_ym@163.com'); // 设置session变量
// echo(session('PHP')).'<br />';
$this->display('information');
}else{
$this->assign('hint','登录失败');
$this->assign('url','__URL__/admin');
$this->display('information');
}
}