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 作用域解析运算符(::)
Jul 27 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
PHP面试题之文件目录操作
Oct 15 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
Yii中srbac权限扩展模块工作原理与用法分析
Jul 14 PHP
php 微信开发获取用户信息如何实现
Dec 13 PHP
PHP实现打包zip并下载功能
Jun 12 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
理理Vue细节(推荐)
2019/04/16 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
python抽象基类用法实例分析
2015/06/04 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
上学迟到的检讨书
2014/01/11 职场文书
物控部经理职务说明书
2014/02/25 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
班组长岗位职责
2014/03/03 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
停车场管理协议书范本
2014/10/08 职场文书
2014年民政工作总结
2014/11/26 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
学校党支部承诺书
2015/04/30 职场文书
电工实训心得体会
2016/01/14 职场文书
PHP 时间处理类Carbon
2022/05/20 PHP
CSS的calc函数用法小结
2022/06/25 HTML / CSS
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS
css弧边选项卡的项目实践
2023/05/07 HTML / CSS