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安全配置
Dec 06 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
深入php常用函数的使用汇总
Jun 08 PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 PHP
php魔术变量用法实例详解
Nov 13 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 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
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
form自动提交实例讲解
2017/07/10 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
python实现图片中文字分割效果
2019/07/22 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Django models filter筛选条件详解
2020/03/16 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
公司爱心捐款倡议书
2014/05/14 职场文书
新法人代表任命书
2014/06/06 职场文书
幼师自荐信范文
2015/03/06 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python