下面考虑网站一个简化版用户账户系统,从注册,登录,使用,登出四个方面做个简单的设计
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客户端程序,此说明简单介绍本程序的各个功能。 一、功能需求分析 本系统为用户主要提供账号模块、推送模块、...
本文主要介绍了该系统的基本功能及具体设计实现方法:系统分析中系统的结构图分析了系统各模块的功能;在系统设计中,详细地展现了系统各个功能模块的设计思路、所需的数据库表及表字段等;最后介绍系统的安全功能...
个人日志系统是基于ASP和SQL Server的一种在Internet上公开发布的快速更新的个人网站系统,使用者可以简单快速地完成个人网页的创建、发布和更新,是一个方便的供广大互联网用户相互交流的平台。它可以是单用户的,...
个人日志系统是一种十分简易的傻瓜式个人信息发布方式,让任何人都可以像免费电子邮件的注册、书写和发送一样,简单快速地完成个人网页的创建、发布和更新,用户可以通过该系统发布日志、图片等各种信息,是一个方便...
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 ...
3 二、分析与设计 3 1、功能模块划分 3 2、数据库结构描述 4 3、系统详细设计文档 6 4、各个模块的实现方法描述 9 5、测试数据及期望结果 11 三、系统测试 16 四、心得体会 23 五、参考文献 24 六、附录 24 一、系统...
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 ...
本文主要介绍了该系统的基本功能及具体设计实现方法:系统分析中系统的结构图分析了系统各模块的功能;在系统设计中,详细地展现了系统各个功能模块的设计思路、所需的数据库表及表字段等;最后介绍系统的安全功能...
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 ...
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 ...
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 ...
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 ...
● 设计(包括概要设计和详细设计,将系统分解为模块); ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 ...
目录 ...1.1.4 相关资源及自学提示 4 ...1.2.4 其他案例 6 ...1.5 几种综合网络服务器...18.1.2 系统模型设计 298 18.1.3 数据库设计 299 18.1.4 公共功能设计 299 18.2 使用MySQL与PHP创建一个留言本 300 18.2.1 查看留言功能...
采用全球认可的最为先进的开放理念——OOP(面向对象),进行全新框架设计。框架结构更为清晰,代码更易于维护。模块化做为功能的开发形式,让扩展性得到保证。V9特别设计的二次开发扩展方式,让你不再修改官方的...
采用全球认可的最为先进的开放理念——OOP(面向对象),进行全新框架设计。框架结构更为清晰,代码更易于维护。模块化做为功能的开发形式,让扩展性得到保证。V9特别设计的二次开发扩展方式,让你不再修改官方的...
界面的设计按照Windows系统最为经典的布局,即上方菜单里、工具栏,左侧树状目录,右侧数据列表,下方状态栏。 好友分组添加、修改、和删除功能,让所有好友各归其位,查看更加方便; 好友信息添加、查看、修改、...
PHPCMS V9产品特色: 全新框架 采用全球认可的最为先进的开放理念——OOP(面向对象),进行全新框架设计。框架结构更为清晰,代码更易于维护。模块化做为功能的开发形式,让扩展性得到保证。V9特别设计的二次开发...
采用全球认可的最为先进的开放理念——OOP(面向对象),进行全新框架设计。框架结构更为清晰,代码更易于维护。模块化做为功能的开发形式,让扩展性得到保证。V9特别设计的二次开发扩展方式,让你不再修改官方的...
鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作...