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环境搭建最新方法
Sep 05 PHP
php通用防注入程序 推荐
Feb 26 PHP
php 文件上传实例代码
Apr 19 PHP
php实现异步数据调用的方法
Dec 24 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
PHP实现图片批量打包下载功能
Mar 01 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP通过GD库实现验证码功能示例
Feb 23 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
smarty模板的使用方法实例分析
Sep 18 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
Python实现控制台输入密码的方法
2015/05/29 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
python实现接口并发测试脚本
2019/06/25 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
How to spawning asynchronous work in J2EE
2016/08/29 面试题
医学生职业规划范文
2014/01/05 职场文书
文明教师事迹材料
2014/01/16 职场文书
企业员工培训感言
2014/02/26 职场文书
工作求职信
2014/07/04 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
工作失误检讨书
2015/01/26 职场文书
初中班主任教育随笔
2015/08/15 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers