信息系统开发笔记

信息系统开发笔记

本文为系统开发的个人笔记,笔者本人为中医药大学信管专业学生,接触完整的系统开发时间不长,以笔记的形式记录自己的开发过程以及思路,其中所阐述的内容均为笔者个人观点,读者对于其中的各个部分有任何不同的见解和解决方式欢迎大家留言评论!

目前只是部分笔记,其余部分将会在后期的笔记中逐个给大家介绍~~

系统简介

本系统基于B/S结构在PHP语言的辅助下进行设计开发,用于实现用户注册,登陆,数据维护、查询及可视化等用途的网页信息系统。本系统前端使用HTML、css、JavaScript以及jquery进行开发;后端部署在阿里云,使用WAMP软件搭建服务器。

WAMP介绍

WAMP就是Windows+Apache+Mysql+PHP。一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

Apache

Apache是一个跨平台的web服务器,由于其简单高效、稳定安全的特性,被广泛应用于计算机技术的各个领域。现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器。

PHP

PHP(Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。

MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

前端设计开发

在系统的架构、系统功能等一系列准备工作完成后正式进入开发阶段。首先是进行前端的开发。前端开发分为两部分:一是页面开发,二是功能开发。

前端页面开发

前端页面开发主要使用HTML、css、javascript、jquery进行开发。其中HTML用于设计和控制页面布局,css用于控制显示样式,使用javascript和jquery对已显示网页进行样式修改。前端页面包括主页、登陆、注册、选项和和可视化等。
登陆页面
注册页面
可视化页面
以上为主要页面展示,具体内容将会在后面的笔记中逐个记录。

前端功能开发

前端功能主要有用户名检查 ,密码检查,手机号检查,企业名称检查,图形验证码生成和检查,访问预留的服务器API接口进行数据交互,数据重构以及数据可视化等功能,这些功能均由javascript和jquery完成开发。其中图形验证码的生成和检查由jquery实现,其余功能均由javascript完成开发。

下面为用户检查的javascript代码:

function checkusername(){
    var username = document.getElementById('username');
    var usernameok = document.getElementById('usernameok');
    var usernameno = document.getElementById('usernameno');
    var spanusername = document.getElementById('spanusername');
    // var pattern = new RegExp("[^a-zA-Z0-9\_\u4e00-\u9fa5]","i"); 
    var pattern = /^[a-zA-Z][a-zA-Z0-9_]{7,20}$/;
    if(username.value !='' && username.value.length>=6 && username.value.length<=20){
      if(pattern.test(username.value)){ 
        //检查用户名是否重复
        $(document).ready(function(){
          var usernames=$('#username').val();
          $.post("/zhuce/php/checkusername.php",
                  {username:usernames},
                  function(data,status){
                    if(status=='success'){
                      if(data==1){
                        usernameno.style.display='';
                        usernameok.style.display='none';
                        spanusername.innerHTML="用户名重复!";
                      }else{
                        usernameno.style.display='none';
                        usernameok.style.display='';
                        spanusername.innerHTML="";
                      }
                    }else{
                      alert("连接失败,请稍后。。。");
                    }
                  });
         });
      }else{
        usernameno.style.display='';
        usernameok.style.display='none';
        spanusername.innerHTML="格式错误!";
      }
    }else{
      usernameno.style.display='';
      usernameok.style.display='none';
      spanusername.innerHTML="长度至少为7!";
    }
  };

后端服务器设计开发

后端服务器部署在阿里云服务器,为了便于学习操作选择了windows环境下的WAMP集成软件,WAMP的优势就在于它在windows环境下进行操作,windows可视化图形界面对于新手来说更加友好,无论是在部署还是在使用都很容易上手。

本系统使用Apache作为web服务器,使用PHP语言辅助进行网页开发,数据库使用MySQL关系型数据库。

对服务器中数据的增删查改操作均在PHP中完成。以登陆为例:

$user=$_POST["user"];
$psw=$_POST["psw"];
include('../zhuce/php/connect.php');
$mysql_table="userdb";
$mysql_state= "SELECT * FROM ".$mysql_table." WHERE binary `username` = '".$user."' AND binary `password` = '".$psw."'";
$result = mysqli_query($db,$mysql_state);
if(mysqli_num_rows($result) > 0){
	while($row = mysqli_fetch_assoc($result)){
		$res[]=['username'=>$row["username"],'phone'=>$row['phone'],'power'=>$row["power"]];
		}
	$_SESSION["username"]=$user;
	$_SESSION["phone"]=$res[0]['phone'];
	$_SESSION["power"]=$res[0]['power'];
	$_SESSION["ip"]=$ip;
	setcookie("session_id", session_id(), time()+ 24 * 3600,"/");
	$response = $user." ".$res[0]['phone']." "."登陆成功!";
	echo "200";
}else{
	$response = $user." "."密码错误登陆失败!";
	echo "101";
}
$db->close();	

用户权限控制

本系统共有5级权限,一级为普通用户,五级为系统管理员,从一级到五级权限逐级递增。不同的权限可以看到内容以及可以使用的功能都有所不同,因此需要进行用户的权限管理,权限管理又分为前端显示时的权限管理以及后端储存的管理,下面分别进行介绍。

后端权限控制

usernamepower
×××5
×××4
×××3

在本系统中权限是用户表中的一个字段,以int型保存在用户表中,在用户使用用户名密码登陆成功后用户信息和权限信息会保存在session中,便于前端浏览器调用信息,同时将session_id保存在用户客户端中,保存时间为24小时,将session_id下发至本地cookie一方面便于用户短时间内的免登陆操作,在登陆状态不被注销的情况下,登陆信息会在session中保存一段时间,即使用户关闭了浏览器,再次打开还是可以通过session_id直接查询到登陆状态。因此,储存在服务器端的session和本地cookie结合使用可以实现短时间内免登陆,同时安全性也有保证。

session_start();
$_SESSION["username"]=$user;
$_SESSION["phone"]=$res[0]['phone'];
$_SESSION["power"]=$res[0]['power'];
setcookie("session_id", session_id(), time()+ 24 * 3600,"/");

前端权限控制

登陆成功后用户名、权限、手机号会储存在服务器session中,同时将session_id储存在本地cookie中。接下来就是权限控制。前端权限控制完全由PHP完成,实现思路如下:

在页面设计时会有一个功能区域出现在所有页面中,这个功能区域就是进行权限控制的最佳选择。因此本系统的权限控制就在页面顶部的导航栏功能区进行。

导航栏功能区在这里插入图片描述
需要使用session首先就需要进行session_start();之后就可从session中获得需要的数据。获得数据的格式就是$_SESSION[" "],引号中输入session_name即可。

if(isset($_SESSION["username"]))

首先,使用isset();判断session中是否有名为username的字段,如果不存在则证明用户还未登录,输出登陆和注册的链接,此时无法正常使用本系统;

if(isset($_SESSION["username"])){
	echo	"<a href='#'>"."hi~".$_SESSION["username"]."!"."</a>";
	echo	"|<a href='/php/exit.php'>注销</a></li>";
	if(isset($_SESSION["username"]) && $_SESSION["power"]==5){
		echo	"|<a href='#'>权限等级:管理员(顶级)权限</a>";
		echo	"|<a href='/addone.php'>添加用户</a>";
		echo	"|<a href='/admininfo.php'>用户管理</a>";
	}else if(isset($_SESSION["username"]) && $_SESSION["power"]==4){
		echo	"|<a href='#'>权限等级:钻石会员</a>";
		// echo	"|<a href='#'>一级查询</a>";
		// echo	"|<a href='#'>二级查询</a>";
		// echo	"|<a href='#'>三级查询</a>";
		// echo	"|<a href='#'>四级查询</a>";
	}else if(isset($_SESSION["username"]) && $_SESSION["power"]==3){
		echo	"|<a href='#'>权限等级:黄金会员</a>";
		// echo	"|<a href='#'>一级查询</a>";
		// echo	"|<a href='#'>二级查询</a>";
		// echo	"|<a href='#'>三级查询</a>";
	}else if(isset($_SESSION["username"]) && $_SESSION["power"]==2){
		echo	"|<a href='#'>权限等级:白金会员</a>";
		// echo	"|<a href='#'>一级查询</a>";
		// echo	"|<a href='#'>二级查询</a>";
	}else if(isset($_SESSION["username"]) && $_SESSION["power"]==1){
		echo	"|<a href='#'>权限等级:普通会员</a>";
		// echo	"|<a href='#'>一级查询</a>";
	}
}else{
	echo	"<a href='denglu.php'>用户登陆</a>";
	echo	"|<a href='zhuce/zhuce.php'>立即注册</a>";
	}

如果存在username则证明用户已经登陆,此时继续进行权限控制流程。此时,问候语和注销都会输出。紧接着进行权限分配,当session中存在username并且power符合相应的要求就会输出相应的功能。

权限控制模块是以<?php include("php/navigater.php");?>的形式放在每个页面里,因此在需要改动时只需改动navigater.php这个文件即可,这种方式极大的减少了页面开发和修改时的重复工作,提高了开发和运维效率。

编写登录日志

Apache服务器本身具有访问日志,但其中记录太过于详细不便于记录查看,因此,为了便于对用户账号登陆注销状态的管理,需要对登陆注销操作进行记录。代码如下:

$write_data = ['time' => date("Y-m-d H:i:s",time()),'ip' => $ip,'res' => $response];
$write_data = json_encode($write_data,JSON_UNESCAPED_UNICODE)."\r\n";
$date = date("Y-m-d",time());
$local = "../Log/loginLogs";				//日志路径
if(!is_dir($local)){						//判断路径是否存在,不存在就创建路径
    mkdir(iconv("UTF-8", "GBK", $local),0777,true);
}
$TxtFileName = "../Log/loginLogs/" . $date . ".txt"; //设置日志路径及名称
if(file_exists($TxtFileName)){						//往已有日志里追加记录
    file_put_contents($TxtFileName, $write_data, FILE_APPEND);
}else{												//日志不存在新建日志并写入记录
    if( ($TxtRes=fopen ($TxtFileName,"w+")) === FALSE){
        exit();
    }
    if(!fwrite ($TxtRes,$write_data)){ 
        fclose($TxtRes);
        exit();
    }
    fclose ($TxtRes); 
}

首先构造数组$write_data,其中包含时间、IP地址以及结;然会使用json_encode();将PHP对象转为JSON数据,便于阅读和调用,其中JSON_UNESCAPED_UNICODE作用是不对中文进行操作,如果不加这个参数,中文会变成编码格式形如“\uxxxx”;接着定义时间路径等完成记录。

同样writeLog.php也是以include("writeLog.php");的方式放在登陆和注销功能中,得到结果如下:
日志文件目录及名称
日志内容

免密登陆(cookie和session实现)

免登陆直接使用系统在本系统依靠cookie和session实现。服务器端的一个session就对应着一个浏览器的会话,我们在不进行任何设置的情况下使用session后直接关闭浏览器session中的数据不会被删除,同时再次用同一个浏览器访问系统时服务器会创建一个新的session,这样长此以往服务器的内存会很紧张,因此需要做一些操作让服务器记住这个浏览器,以免每次访问都创建新的session。

if(!empty($_COOKIE["session_id"])){
		session_id($_COOKIE["session_id"]);
	}
session_start();

在登陆完成后session_id会被储存在本地cookie中命名为session_id,每次在访问页面先判断是否有名为session_id的cookie存在,如果存在则将其中的id提交给session_id();然后在进行session_start();操作。注意:id的赋值一定要在session_start();之前,否则就会创建新的session。

这样一来,服务器就会记住这个浏览器,这个浏览器每次访问都不会再新建session。其次就是对session的管理,对session设置过期时间,长时间无操作后就回收session,以此保护用户的账户安全,同时也满足了用户短时间内免密码登陆的需求。

TIPS

后续会持续更新,欢迎大家阅读,有疑问可以共同讨论!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frederick Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值