`

模块简单设计——设计简单的账号系统

 
阅读更多

下面考虑网站一个简化版用户账户系统,从注册,登录,使用,登出四个方面做个简单的设计

 

account表包含下面三个字段

id 一个表唯一的id,标识用户

user 用户名

passwd 用户密码(为了防止数据库被侵入泄露密码,需要如md5(passwd)或者crypt单向加密)

 

1,用户注册(POST /register.php)

 

如果网站是https协议,直接通过POST方式提交用户名和密码等信息;

如果是http协议,考虑到有可能传输数据被监听,可以用js对信息加密(比如对密码计算md5);

注:由于用户注册是一次性行为,这里可以简化业务。不过为了防止恶意程序批量注册用户,可以引入验证码或者限制IP一段时间内调用此接口次数。

POST:

account ciaos@email.com

user ciaos

passwd passwd

服务器端用md5或者crypt处理密码后存入数据库,如下

 

{
	"_id" : ObjectId("50b324a33ec92c5bfbbda3df"),
	"user" : "ciaos",
	"passwd" : "76a2173be6393254e72ffa4d6df1030a"
}

 

2,用户登录(POST /login.php)

 

这是一个很频繁的行为,容易被第三者监听,密码一般需要加密。为了防止被穷举用户密码,可以引入一个随机数避免频繁调用,后台也应该控制一定时间内的接口调用次数。

POST:

user ciaos

passwd md5(md5(passwd)+tag)

tag time()

 

服务器端按照同样算法计算md5(数据库中加密后密码+tag)是否与passwd一致

md5(md5(passwd)+tag) equal or not md5(数据库密码密文+tag)

 

如果用户登录成功,生成一个cookie保存用户信息用于以后验证用户,由于后续步骤需要从cookie中提取用户信息,所以需要用可逆算法。为了避免别人猜测cookie,服务器端需要保存一份私钥。

Http Basic/Digest认证以及AES,DES加密都是比较成熟安全的解决方案,不过有点复杂。我们这里实现一个最简单的cookie生成算法。

 

<?php
function alterstring($content)
{
	//私钥
	$secret = "abcdefghijklmnopqrstuvwxyz";
	
	//加密解密算法
	for($i=0;$i < strlen($content);$i++){
    		$content[$i] = $content[$i] ^ $secret[$i%strlen($secret)];
	}
    return $content;
}
?>

生成cookie的方式(此处用主键_id代替user,减少账号泄露风险)

 

<?php
    $c_userid = base64_encode(alterstring($_id));
    setcookie("userid",$c_userid,time()+3600*24);
?>

浏览器就保存了cookie(userid = AgsCCxY%3D)

3,访问网站

使用第二步得到的cookie访问网站,服务器端脚本解析cookie获取用户信息

 

<?php
	if(isset($_COOKIE["userid"]))
	{
		$userid = $_COOKIE["userid"];
		$_id = alterstring(base64_decode($userid));

		//查询数据库判断用户权限,db.account.findOne({"_id":$_id})
		//查询用户信息	$userinfo = db.userinfo.findOne({"_id":$_id})
	}
?>

 

4,登出网站

删掉cookie即可

 

<?php
	setcookie("userid","",time() - 3600);
	header("Location: index.php");
?>

 

附加思考:第三步需要频繁读取数据库,可以考虑缓存或者记录session等方式避免频繁的数据库操作。

 

可以考虑使用下面的流程:

① 判断服务器端是否有session,如果有则直接访问受限资源,如果无转②;

② 查询数据库或者缓存校验cookie是否合法,如果cookie不存在或者合法则跳转到登录页面,如果合法,则生成session。

③ 如果采用这种设计,登出网站时还需要清除session才行

分享到:
评论

相关推荐

    毕业设计——网络音乐播放器

    毕业设计——MP3播放器 本程序为本人毕业设计《基于Android网络音乐播放器的设计与实现》中的Android客户端程序,此说明简单介绍本程序的各个功能。 一、功能需求分析 本系统为用户主要提供账号模块、推送模块、...

    Java程序设计——房产中介管理系统

    《Java程序设计——房产中介管理系统》是一份课程设计报告,旨在通过Java技术和Oracle数据库实现一个简易的房产中介系统。这份报告出自数学与信息工程学院信息管理与信息系统专业的学生之手,详细阐述了系统的设计...

    ASP毕业设计——ASP物流管理系统设计(源代码+论文).zip

    ASP毕业设计——ASP物流管理系统设计是一个典型的Web应用项目,它主要使用了Active Server Pages (ASP) 技术来构建一个在线物流管理平台。ASP是一种基于服务器端的脚本环境,常用于创建动态交互式网页。这个项目对于...

    VB毕业设计——vb学生档案管理系统设计与实现.zip

    《VB毕业设计——vb学生档案管理系统设计与实现》是一个基于Visual Basic(VB)的项目,旨在为学生档案管理提供一个高效、便捷的解决方案。在这个系统中,VB作为主要的编程语言,结合数据库技术,实现了对大量学生...

    数据库课程设计报告——网上购书系统.doc

    【数据库课程设计报告——网上购书系统】 课程设计的目标是强化和实践数据库课程中的理论知识,通过构建一个模拟实际应用的网上购书系统,提升学生对数据库管理、数据处理和团队协作的理解。网上购书系统主要包含两...

    库存管理系统——数据库设计

    ### 库存管理系统——数据库设计 #### 一、系统设计 **总原则:** - 首要确保系统总目标的实现。 - 强调模块的独立性,并保持清晰简单的接口。 **系统结构图:** - **数据录入:** 负责数据的输入工作,如物料...

    计算机房使用排课系统设计与实现——学生、教师查询模块及排课算法实现.doc

    ### 计算机房使用排课系统设计与实现——学生、教师查询模块及排课算法实现 #### 摘要解读 本系统旨在解决高校在安排计算机房使用时面临的复杂排课问题。其核心目标是根据学校的实验课程计划、教师资源、机房设备...

    ASP.NET毕业设计——ASP+ACCESS课程教学网站信息交流与发布系统(源代码+论文+外文翻译).zip

    【ASP.NET毕业设计——ASP+ACCESS课程教学网站信息交流与发布系统】 ASP.NET是一种由微软公司推出的高效、灵活且可扩展的Web应用程序开发框架。它基于.NET Framework,为开发人员提供了构建动态、数据驱动的Web应用...

    Java毕业设计——Java聊天室的设计与实现(论文+答辩PPT+源代码+数据库).zip

    8. **源代码组织**:源代码的结构反映了软件的模块化设计,良好的代码组织可以帮助理解和维护项目。开发者应遵循一定的编程规范和设计模式。 9. **答辩PPT**:这份PPT可能包含了项目背景、目标、技术选型、实现过程...

    51课程设计汇编编写 门禁系统

    本课程设计的主题是“51汇编编写门禁系统”,通过这个项目,我们可以深入理解51汇编的模块化编程技巧以及如何利用它来实现一个实际应用——门禁系统。 门禁系统是一种常见的安全控制设备,通常用于限制或允许人员...

    [计算机毕设]基于asp的个人日志系统设计与实现(源代码+项目报告).zip

    本文主要介绍了该系统的基本功能及具体设计实现方法:系统分析中系统的结构图分析了系统各模块的功能;在系统设计中,详细地展现了系统各个功能模块的设计思路、所需的数据库表及表字段等;最后介绍系统的安全功能...

    ASP个人日志系统的设计与实现(源代码+毕设文档).zip

    个人日志系统是基于ASP和SQL Server的一种在Internet上公开发布的快速更新的个人网站系统,使用者可以简单快速地完成个人网页的创建、发布和更新,是一个方便的供广大互联网用户相互交流的平台。它可以是单用户的,...

    毕业设计,基于ASP+SqlServer开发的个人日志系统,内含完整源代码,数据库,毕业论文

    本文主要介绍了该系统的基本功能及具体设计实现方法:系统分析中系统的结构图分析了系统各模块的功能;在系统设计中,详细地展现了系统各个功能模块的设计思路、所需的数据库表及表字段等;最后介绍系统的安全功能...

    个人日志系统的设计与实现

    个人日志系统是一种十分简易的傻瓜式个人信息发布方式,让任何人都可以像免费电子邮件的注册、书写和发送一样,简单快速地完成个人网页的创建、发布和更新,用户可以通过该系统发布日志、图片等各种信息,是一个方便...

    单简多用户文件系统操作系统课程设计--毕业设计.doc

    【操作系统课程设计——简单多用户文件系统】 操作系统课程设计是一个至关重要的实践环节,它让学生能够将理论知识与实际操作相结合,提升分析问题和解决问题的能力。本次设计的目标是构建一个简单的多用户文件系统...

    初学——简单的快递网站

    在构建“初学——简单的快递网站”项目时,开发者成功地实现了基础的核心功能,使得用户能够进行基础的快递查询和管理。尽管系统在用户体验和功能完善性方面还有待提升,但这一初步成果对于初学者来说是一项值得肯定...

    java实训报告(简单人事管理系统的设计与实现).doc

    【Java 实训报告——简单人事管理系统的设计与实现】 在当今信息化社会中,人事管理系统作为企业内部管理的重要工具,能够有效地管理员工信息、部门结构、考勤记录等,提高工作效率,减少人为错误。本实训报告将...

    JAVA源码JAVASmart系统-题库及试卷管理模块的设计与开发(源代码+论文)

    本项目——JAVA Smart系统中的题库及试卷管理模块,旨在为学校提供一个高效、便捷的在线试题管理系统。 #### 二、关键技术点 1. **Java技术栈**:本项目基于Java语言进行开发,利用其强大的跨平台能力和丰富的类库...

    个人理财管理系统(毕业设计)

    《个人理财管理系统——VB与ACCESS数据库的智慧结晶》 个人理财管理系统是一款专为个人用户设计的财务管理工具,它集成了日常收支记录、财务分析、预算设定等功能,旨在帮助用户更好地规划和管理自己的财务状况。这...

Global site tag (gtag.js) - Google Analytics