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
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
分享3个php获取日历的函数
Sep 25 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
Yii2数据库操作常用方法小结
May 04 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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函数
2011/05/31 PHP
php-fpm配置详解
2014/02/12 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
php-fpm中max_children的配置
2019/03/15 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
清空上传控件input file的值
2010/07/03 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
python tqdm库的使用
2020/11/30 Python
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
投标保密承诺书
2014/05/19 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
导游词之河北邯郸
2019/09/12 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript