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 相关文章推荐
我常用的几个类
Oct 09 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 PHP
php 原生分页
Apr 01 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 $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
JS表的模拟方法
2015/02/05 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python黑魔法之编码转换
2016/01/25 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python实现批量图片格式转换
2020/06/16 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python里运用私有属性和方法总结
2019/07/08 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
品管员岗位职责
2013/11/10 职场文书
个人自荐信
2013/12/05 职场文书
七年级英语教学反思
2014/01/15 职场文书
股东合作协议书范本
2014/04/14 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技