PHP+MYSQL会员系统的开发实例教程


Posted in PHP onAugust 23, 2014

本文通过一个简单的实例完成了完整的PHP+MySQL会员系统功能。是非常实用的一个应用。具体实现步骤如下:

一、会员系统的原理:
 
  登陆-->判断-->保持状态(Cookie或Session)-->验证状态及其权限

二、会员系统的安全:

1、学会使用常量提高md5安全性
2、Cookie/ Session 少用明文信息
3、Session安全性要大于Cookie
4、使用Cookie/ Session读取信息 尽量增加判断信息
5、Cookie/ Session内容要精简
6、对于错误信息及时销毁Cookie/ Session

三、数据库test,表user_list,及其字段

  uid     m_id     username     password
  1       1        admin        291760f98414679e3fd3f9051b19b6f7
  2       2        admin2       895785cfa5d8157f4d33c58ae0f55123

password:分别为md5(admintest100)、md5(admin2test100)即密码是与常量test100绑定后,再经过加密储存到数据库中的,这一步可以在注册时设置。

四、配置页面m_config.php:

<?php
 session_start();
 //数据库连接
 $conn=mysql_connect('localhost','root','');
 mysql_select_db('test',$conn);
 //定义常量
 define(ALL_ps,"test100");
 //查看登录状态与权限
 function user_shell($uid,$shell,$m_id){
   $sql="select * from user_list where `uid`='$uid'"; 
   $query=mysql_query($sql);
   $us=is_array($row=mysql_fetch_array($query));
   $shell=$us ? $shell==md5($row[username].$row[password].ALL_PS):FALSE;
   if($shell){
     if($row[m_id]<=$m_id){//$row[m_id]越小权限越高,为1时权限最高
       return $row;
     }else{
       echo "你的权限不足,不能查看该页面";
       exit(); 
     }
   }else{
     echo "登录后才能查看该页";
     exit(); 
   } 
 }
 //设置登录超时
 function user_mktime($onlinetime){
    $new_time=mktime();
    echo $new_time-$onlinetime."秒未操作该页面"."<br>";
    if($new_time-$onlinetime>'10'){//设置超时时间为10秒,测试用
      echo "登录超时,请重新登录";
      exit();
      session_destroy();
    }else{
      $_SESSION[times]=mktime();
    }
 }
?>

五、登录页面m_user.php:

<?php
 include("m_config.php");
 //echo md5("admin2".ALL_PS);
 if($_POST[submit]){
  $username=str_replace(" ","","$_POST[username]");
  $sql="select * from user_list where `username`='$username'"; 
  $query=mysql_query($sql);
  $us=is_array($row=mysql_fetch_array($query));
  $ps=$us ? md5($_POST[password].ALL_PS)==$row[password] : FALSE;
  if($ps){
    $_SESSION[uid]=$row[uid];
    $_SESSION[user_shell]=md5($row[username].$row[password].ALL_PS);
    $_SESSION[times]=mktime();//取得登录时忘该的时间
    echo "登录成功";
  }else{
    echo "用户名或密码错误";
    session_destroy();//密码错误时消除所有的session
  }
 }
?>
<form action="" method="post">
 用户名:<input name="username" type="text" /><br />
 用户名:<input name="password" type="password" /><br />
 验证码:<input name="code" type="code" />5213<br /><br />
 <input name="submit" type="submit" value="登录" />
</form>

六、设置了权限及超时的页面m_zhuangtai.php:

<?php
 include("m_config.php"); 
 $arr=user_shell($_SESSION[uid],$_SESSION[user_shell],1);//设置该页面只有权限为1时即最高权限的才能访问
 
 user_mktime($_SESSION[times]);//判断是否超时10秒
 
 //echo $_SESSION[times]."<br>";//登录时该的时间
 //echo mktime()."<br>";//当前日期
 //echo $arr[username]."<br>";
 //echo $arr[uid]."<br>";
 
?>

有权限方能查看的内容

七、测试结果:
 
1、用sss,sssssss登录,提示:用户名或密码错误。查看m_zhuangtai.php,提示:登录后才能查看该页。
2、用admin admin登录后,因为权限为1,所以可以查看m_zhuangtai.php页面的内容。
3、用admin admin登录后,因为权限为1,所以可以查看m_zhuangtai.php页面的内容,但10秒后再刷新,提示:X秒未操作该页面 登录超时,请重新登录。
4、用admin2 admin2登录后,因为权限为2,所以无法查看m_zhuangtai.php页面的内容,提示:你的权限不足,不能查看该页面。

希望本文所述实例对大家PHP程序开发有所帮助。

PHP 相关文章推荐
国内php原创论坛
Oct 09 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
PHP动态创建Web站点的方法
Aug 14 PHP
php Hex RGB颜色值互换的使用
May 10 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
php判断文件夹是否存在不存在则创建
Apr 09 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
php 中phar包的使用教程详解
Oct 26 PHP
设定php简写功能的方法
Nov 28 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 #PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 #PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 #PHP
wamp安装后自定义配置的方法
Aug 23 #PHP
PHP中feof()函数实例测试
Aug 23 #PHP
PHP实现利用MySQL保存session的方法
Aug 23 #PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 #PHP
You might like
建立动态的WML站点(三)
2006/10/09 PHP
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
Prototype Hash对象 学习
2009/07/19 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
全面了解js中的script标签
2016/07/04 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
入团者的自我评价分享
2013/12/02 职场文书
计算机求职信
2014/07/02 职场文书
工作岗位职责范本
2015/02/15 职场文书
孔繁森观后感
2015/06/10 职场文书
反邪教教育心得体会
2016/01/15 职场文书
2019 入党申请书范文
2019/07/10 职场文书
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis