仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1359|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网站制作之用Session对Web页面停止回护

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:30:07 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
理解网站这一概念之后不难看出,任何网站都是由网页组成的,也就是说想完成网站,必须先学会做网页,因此必须要掌握了HTML,才能为今后制作网站打下基础。session|web|页面   在良多时分,咱们都要对某些Web 页面停止平安回护。典范的例子就是前台阅读页面与后台办理页面的平安性。这也是 WEB 上用得最多的一种页面平安形式。在用PHP4 开辟一个小型的书本办理体系中,我也碰到了这个平安成绩。因而我想到了PHP4 的新特征----Session ..

请求目标:统一站点,无权用户,普通受权用户和超等用户能看到和利用分歧的页面。

完成举措:在要回护的页面 include 分歧级其余平安查验摸板。

注重事项:
1 > 要防止用户阅读器不利用 cookie 而不克不及阅读受回护的页面(session 默许利用客户真个 cookie).
2 > 要避免权限被盗用。( PHP 4 的 session 的默许存活时代是从创立 session 入手下手到封闭阅读器为止。)

若何利用:
1 > 在需求普通回护的页面的代码最前边加上 include ("secturity2.php"); 就好了
2 > 在需求特别回护的页面的代码最前边加上 include ("secturity1.php"); 和 include ("secturity2.php"); 就好了
(假定一切文件都在统一个文件夹里)

法式代码及具体注释:
security1.php 特别用户页面回护摸板
security2.php 普通用户页面回护摸板
login2.php 用户上岸页面

咱们先来看 login2.php (用户上岸页面)的代码:

<?php
session_register("user");#增添用户名变数
session_register("password"); #增添暗码变数
session_register("tmLast"); #增添工夫变数
if($user==""){#判别是不是是第一次上岸
$error="Chooseyounameandinputthepasswordplease!";
}
$tmLast=date("U"); #纪录上岸工夫
if($user1)
$user=trim($user1); #纪录用户名(援用user1变量是为何?请读者本人思虑。)
$password=trim($password1); #纪录暗码
if($user1&&$password1){
if($password1==888){ #判别上岸暗码是不是是默许暗码888停止 PHP 程式
$sid="PHPSESSID=".session_id(); #保留以后session的ID号
$warning="Yourpasswordisstillthedefaultpassword888,pleasechangeit.";
header("Location:changePassword.php?$sid&warning=$warning"); #传递正告参数warning到changePassword.php 页面
exit(); #立即停止 PHP 程式
}
if(strtolower($user)=="root"){ #判别上岸用户是不是是超等用户,可以自行扩大用户
$fileName="backend_index.php";
}
else{
if(!$fileName) #判别进入上岸页面的上一页是不是是受回护页面
$fileName="index.php";
}
$sid="PHPSESSID=".session_id(); #保留以后session的ID号
header("Location:$fileName?$sid); #上岸胜利进入指定页面,传递以后session的ID号,避免用户不利用 cookie 而读不到 session 值
exit(); #立即停止 PHP 程式
}
?>
<html>
<title></title>
<head>
<linkrel="stylesheet"href="class/style.CSS">
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<h2>LoginPage</h2>
<?php
echo"$error"; #显示上岸提醒
?>
<formaction="<?phpecho$PHP_SELF;#提交到以后页?>"method=post>
<P><b>Name:</b>
<?php
include("class/dbclass.inc"); #挪用dbclass.inc类,用法和 mysql.inc 类一样
$q=newDB_Sql; #界说一个新的对象
$q->connect($Host,$Database,$User,$Password); #毗连 mysql数据库
$query="selectchrUserName,chrFirstName,chrLastName".
"fromUser".
"wherechrFirstName!=''".
"orderbychrFirstName";
$q->query($query); #履行sql语句
echo"<selectname=user1size=1>";
while($q->next_record()){ #从数据库中调出普通用户
if($user==$q->f(0)) #判别是不是是以后用户
$select="selected"; #是以后用户则设置为默许值
else
$select="";
echo"<optionvalue='".$q->f(0)."'$select>".
ucfirst($q->f(1))."". #用户名首字大写
ucfirst($q->f(2))."</option>";
}
echo"</select>";
?></P>
<P><b>Password:</b><INPUTname=password1type=password></P>
<INPUTname=tmLasttype=hiddenvalue=<?phpechodate("U")?>>
<INPUTname=fileNametype=hiddenvalue=<?phpecho$fileName?>>
<P><INPUTname=submittype=submitvalue=确认></P>
</form>

security2.php (普通用户页面回护摸板):
<?php
session_register("user"); #申明同上
session_register("password");
session_register("tmLast");
if($fileName=="")
$fileName=$PHP_SELF; #纪录以后页面途径
if($durtime=="")
$durtime=300; #设置 session “生效”工夫
$currtime=date("U");
if(($currtime-$tmLast)>$durtime){ #判别 session是不是“生效”
//session_destroy();
$error=urlencode("Seesionexpired.Loginagainplease!");
header("Location:login2.php?fileName=$fileName&error=$error&user=$user"); #跳到从头上岸页
exit();
}
else{
$tmLast=$currtime; # session 没“生效”则更新最初“上岸”工夫
}

include("class/dbclass.inc");

$q=newDB_Sql;
$q->connect($Host,$Database,$User,$Password);

$query="selectidUserfromUser".
"wherechrUserName='$user'".
"andchrPasswd='$password'";
$q->query($query);

if(!$q->num_rows()){ #判别是不是找到暗码婚配的用户
$error=urlencode("PasswordiswrongorNoprivilegeuser.");
header("Location:login2.php?fileName=$fileName&error=$error&user=$user"); #跳到暗码毛病上岸页
}
else{
$sid="PHPSESSID=".session_id();
$q->next_record();
$USERID=$q->f(idUser); #保留经由过程验证用户的ID号,便利今后利用
}
?>

security1.php (特别用户页面回护摸板):
<?php
session_register("user"); #申明同上
$privilege="root,macro,jackie"; #设置超等用户名单列表,用“,”离隔
$pieces=explode(",",$privilege); #获得单个超等用户名单
for($i=0;$i<count($pieces);$i++){
if(strtolower($user)==$pieces[$i]){ #判别是不是是超等用户
$hasPrivilege=1;
break; #跳出判别轮回
}
}

if(!$hasPrivilege){
if($fileName=="")
$fileName=$PHP_SELF;
$error=urlencode("Youhavenoprivilegetoviewthispage!");
header("Location:login2.php?fileName=$fileName&error=$error&id=$id");
exit(); #跳到无权用户上岸页面
}
?>



  理解动态语言的概念,运做机制,熟悉PHP语法
兰色精灵 该用户已被删除
沙发
 楼主| 发表于 2015-2-28 00:45:41 | 显示全部楼层
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-20 23:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表