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 相关文章推荐
3
Oct 09 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
php实现图片以base64显示的方法
Oct 13 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP环形链表实现方法示例
Sep 15 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
python+os根据文件名自动生成文本
2019/03/21 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
个人党性剖析材料
2014/02/03 职场文书
安全责任协议书
2014/04/21 职场文书
努力学习演讲稿
2014/05/10 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
先进教师个人总结
2015/02/11 职场文书
教务处干事工作总结
2015/08/14 职场文书
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server