PHP+MYSQL会员系统的登陆即权限判断

form页面

防止刷新或再交提交

先来看配置文件

<form action=”login.php” method=”post”>
用户名<input type=”text” name=”username”><br>
密码<input type=”text” name=”password”><br>
记住密码<input type=”checkbox” name=”jizhu” value=”1″><br>
<input type=”submit”>
</form>
<a href=”userinfo.php”>用户信息</a>
<?php
session_start();
function p($arr){
echo “<pre>”;
print_r($arr);
echo “</pre>”;
}
p($_SESSION);
p($_COOKIE);
?>

所以就考虑增加一个参数来防止这类情况的发生,COOKIE和SESSION可供选择,不过
COOKIE是客户端的,如果人家禁用COOKIE的话,照样可以恶意刷新点击数。还是用SESSION的好,IP+URL参数的MD5值做
SESSION名
实现原理 设置 max_reloadtime =100; //设置页面刷新最长间隔时间
用户第一次打开页面 记录当前的时间保存在 session_start
用户第二次打开页面(判断 session_start是否存在) 用当前时间和
session_start 相减 得到差值 time_passed
当 time_passed < max_reloadtime 表示用户在指定时间内频繁刷新了
警告后直接退出

 

登录页面

 代码如下

 代码如下

<?php
function p($arr){
echo “<pre>”;
print_r($arr);
echo “</pre>”;
}
session_start();
//p($_POST);
$_SESSION[‘username’] = $_POST[‘username’];
$_SESSION[‘password’] = $_POST[‘password’];
if($_POST[‘jizhu’]){
setcookie(‘username’,$_POST[‘username’],time()+60);
setcookie(‘password’,$_POST[‘password’],time()+60);
}
header(“location:form.php”);

<?php 
    session_start(); 
    $k = $_GET[‘k’]; 
    $t = $_GET[‘t’]; 
    //防刷新时间 
    $allowTime = 1800; 
    $ip = get_client_ip(); 
    $allowT = md5($ip . $k . $t); 
    if (!isset($_SESSION[$allowT])) { 
       $refresh = true; 
       $_SESSION[$allowT] = time(); 
    } elseif (time() – $_SESSION[$allowT] > $allowTime) { 
       $refresh = true; 
       $_SESSION[$allowT] = time(); 
    } else { 
       $refresh = false; 
    } 
    ?>  

<?php教程
//启动session
session_start();
//数据库教程连接
$conn=mysql教程_connect(‘localhost’,’root’,’******’);
mysql_select_db(‘test’,$conn);
//定义常量
define(“ALL_PS”,”php100″);
//判断权限函数
function user_shell($uid,$shell){
$sql=”SELECT * FROM `user_list` WHERE `uid` = ‘$uid'”;
$query=mysql_query($sql);
$exist=is_array($row=mysql_fetch_array($query));
$exist2=$exist?$shell==md5($row[‘username’].$row[‘password’].ALL_PS):FALSE;
if($exist2){
return $row;
}else{
echo “你无权限访问该页”;
exit();
}
}
?>

用户信息页面

防表单重复提交

登录页面

<?php
session_start();
echo “先关闭浏览器,在访问form.php 试试,然后 点推出在关闭浏览器试试”;
p($_SESSION);
p($_COOKIE);
if(empty($_SESSION[‘username’])){
if(empty($_COOKIE[‘username’])){
echo “<a href=’form.php’>请先登录</a>”;exit;
}else{
$_SESSION[‘username’] = $_COOKIE[‘username’];
}
}
function p($arr){
echo “<pre>”;
print_r($arr);
echo “</pre>”;
}
?>
2131231231
<a href=”updateuserinfo.php”>修改信息</a>
<a href=”logout.php”>推出</a>

 代码如下

 

推出页面

 <?php   
    /* 改进版
    PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。
   
由于表单变量的内容由$_POST[‘name’]引用,也许在处理完表单后,直接将$_POST[‘name’]销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST[‘name’],刷新后,$_POST[‘name’]还是会被赋值,一样有效。  
   
可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session
的值,如果不是400,就不再处理表单中的数据。
    可设置Session的有效时间?   
    */ 
    if (isset($_POST[‘action’]) && $_POST[‘action’] ==
’submitted’) {      
         session_start();      
         isset($_SESSION[‘num’]) or die (“no session”);      
         if ($_SESSION[‘num’]==400){      
                 print ‘<pre>’;      
                 print_r($_POST);      
                 print ‘<a href=”’. $_SERVER[‘PHP_SELF’]
.’”>Please try again</a>’;      
                 print ‘</pre>’;      
                 $_SESSION[‘num’]=500;      
         } else {      
                 print ‘<pre>’;      
                 print_r($_POST);      
                 echo “However you have submitted”;      
                 print ‘</pre>’;      
         }      
    } else {      
         session_start() or die(“session is not started”);      
         $_SESSION[‘num’]= 400;       
    ?>     
    <form action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>”
method=”POST”>     
    Name: <input type=”text”
name=”personal[name]”><br>     
    Email: <input type=”text”
name=”personal[email]”><br>     
    Beer: <br>     
    <select multiple
name=”beer[]”>     
         <option value=”warthog”>Warthog</option>     
         <option value=”guinness”>Guinness</option>     
         <option value=”stuttgarter”>Stuttgarter
Schwabenbr</option>   
    </select><br>     
    <input type=”hidden” name=”action” value=”submitted”>     
    <input type=”submit” name=”submit” value=”submit me!”>     
    </form>     
    <?php     
    }      
    ?> 

 代码如下

<?php
session_start();
unset($_SESSION[‘username’]);
unset($_SESSION[‘password’]);
setcookie(‘username’,”,0);
setcookie(‘password’,”,0);
header(“location:form.php”);
?>

例,一个基于smarty演示版

<?
include(“config.php”);
if($_POST[‘submit’]){
$username=str_replace(” “,””,$_POST[‘username’]); //去除空格
$sql=”SELECT * FROM `user_list` WHERE `username` = ‘$username'”;
$query=mysql_query($sql);
$exist=is_array($row=mysql_fetch_array($query));
//判断是否存在这样一个用户
$exist2=$exist?md5($_POST[‘password’].ALL_PS)==$row[‘password’]:FALSE;//判断密码
if($exist2){
$_SESSION[‘uid’]=$row[‘uid’]; // session赋值
$_SESSION[‘user_shell’]=md5($row[‘username’].$row[‘password’].ALL_PS);
echo “登陆成功”;
}else{
echo “不正确的用户名”;
SESSION_DESTROY();
}
}
?>
<form action=”” method=”post”>
用户名:<input type=”text” name=”username” /><br>
密码:<input type=”password” name=”password”/><br>
验证码:<input
type=”code” name=”code” size=”10″/>
<img src=”imgcode.php”><br><br>
<input type=”submit” name=”submit” value=”登陆”/>
</form>
<a
href=”;

修改用户信息页面

 代码如下

权限判断页面

<?php
session_start();
if(empty($_SESSION[‘username’])){
echo “请先登录”;
}else{
echo “这里是信息”;
}
?>

$code = mt_rand(0,1000000);
setcookie(‘addtips’,$code,time()+300);
if(isset($_POST[‘submit’]) ){    
if($_COOKIE[‘addtips’]!= $_POST[‘code’]){            
  echo “请不要刷新本页面或重复提交表单”;
exit();
}
}
$smarty->assign(‘code’,$code);

 

10./////防止表单重复提交

 代码如下

在tpl模板中

<?
include(“config.php”);
$arr=user_shell($_SESSION[‘uid’],$_SESSION[‘user_shell’]);//以上两句即可对权限进行判断
echo $arr[‘username’];
?>

 

权限内容

 代码如下

  1. <input type=”hidden” name=”code” value=”{$code}”/>

/*利用PHP的Session功能,也能避免PHP表单重复提交。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交
*/

  session_start();//根据当前SESSION生成随机数  
  $code = mt_rand(0,1000000);  
   $_SESSION[‘code’] = $code;  
//在表单中隐藏传递:
   < input type=”hidden” name=”originator” value=”<
?=$code?>”>

//在接收页代码如下:

 session_start();  
  if(isset($_POST[‘originator’])) {  
   if($_POST[‘originator’] ==
   $_SESSION[‘code’]){  
   // 处理该表单的语句,省略  
  }else{  
   echo ‘请不要刷新本页面或
   重复提交表单!’;  
  }  
  }

发表评论

电子邮件地址不会被公开。 必填项已用*标注