1.首先简单说说wifidog认证的过程
客户端首次连接到wifi后,浏览器请求将会被重定向到:
login/?gw_address=%s&gw_port=%d&gw_id=%s&url=%s
验证通过后,客户端被重定向到网关,url格式如下:
http://网关地址:网关端口/wifidog/auth?token=
wifidong会启动一个线程周期性地报告每一个用户的状态信息,并通过如下地址发送给认证服务器:
auth_server:/auth/?stage=
ip=
mac=
token=
incoming=
outgoing=
认证服务器根据该状态信息决定是否允许该用户继续连接,并回复网关,回复格式为:Auth:状态码,
如:Auth:1
常用状态码:
0:AUTH_DENIED,表示拒绝
1:AUTH_ALLOWED,验证通过
验证通过后,将重定向到如下地址:
portal/?gw_id=%s
wifidog的ping协议
wifidog通过ping协议将当前状态信息发送给认证服务器,发送地址为:
http://auth_sever/ping/?
gw_id=%s
sys_uptime=%lu
sys_memfree=%u
sys_load=%.2f
wifidog_uptime=%lu
认证服务器须返回一个“Pong”作为回应。
具体php实现代码如下
public function auth() { //响应客户端的定时认证,可在此处做各种统计、计费等等/* wifidog 会通过这个接口传递连接客户端的信息,然后根据返回,对客户端做开通、断开等处理,具体返回值可以看wifidog的文档wifidog主要提交如下参数 1.ip 2. mac 3. token(login页面下发的token)
4.incoming 下载流量
5.outgoing 上传流量
6.stage认证阶段,就两种login 和 counters */ $stage = $_GET['stage'] == 'counters'?'counters':'login'; if($stage == 'login') { //XXXX跳过login 阶段的处理XXXX不能随便跳过的//默认返回允许
echo "Auth: 1"; } else if($stage == 'counters') {
//做一个简单的流量判断验证,下载流量超值时,返回下线通知,否则保持在线
if(!empty($_GET['incoming']) and $_GET['incoming'] > 10000000) { echo "Auth: 0"; }else{ echo "Auth: 1/n";
} } else echo "Auth: 0"; //其他情况都返回拒绝
/* 返回值:主要有这两种就够了0 - 拒绝
1 - 放行官方文档如下0 - AUTH_DENIED - User firewall users are deleted and the user removed. 6 - AUTH_VALIDATION_FAILED - User email validation timeout has occured and user/firewall is deleted(用户邮件验证超时,防火墙关闭该用户) 1 - AUTH_ALLOWED - User was valid, add firewall rules if not present 5 - AUTH_VALIDATION - Permit user access to email to get validation email under default rules (用户邮件验证时,向用户开放email)-1 - AUTH_ERROR - An error occurred during the validation process */ } public function portal() { /* wifidog 带过来的参数如下
1. gw_id */ //重定到指定网站或者显示splash广告页面
redirect('https://www.doczj.com/doc/664667077.html,', 'location', 302); } public function ping() { //url请求"gw_id=$gw_id&sys_uptime=$sys_uptime&sys_memfree=$sys_memfree&sys_load=$sys_load &wifidog_uptime=$wifidog_uptime";
//log_message($this->config->item('MY_log_threshold'),
__CLASS__.':'.__FUNCTION__.':'.debug_printarray($_GET)); //判断各种参数是否为空if( !(isset($_GET['gw_id']) and isset($_GET['sys_uptime']) and isset($_GET['sys_memfree']) and isset($_GET['sys_load']) and isset($_GET['wifidog_uptime']) ) ) { echo '{"error":"2"}';
return; } //添加心跳日志处理功能/* 此处可获取wififog提供的如下参数 1.gw_id来自wifidog 配置文件中,用来区分不同的路由设备 2.sys_uptime 路由器的系统启动时间 3.sys_memfree 系统内存使用百分比
4.wifidog_uptime wifidog持续运行时间(这个数据经常会有问题)*/
//返回值echo 'Pong'; } /** * wifidog 的gw_message 接口,信息提示页面 */ function gw_message() { if (isset($_REQUEST["message"])) { switch ($_REQUEST["message"]) { case 'failed_validation':
//auth的stage为login时,被服务器返回AUTH_VALIDATION_FAILED 时,来到该处处理//认证失败,请重新认证
break; case 'denied': //auth的stage为login时,被服务器返回AUTH_DENIED时,来到该处处理//认证被拒break; case 'activate': //auth的stage为login时,被服务器返回AUTH_VALIDATION时,来到该处处理//待激活
break; default: break;
} }else{ //不回显任何信息} }
.486 CRLF MACRO MOV AH,0EH MOV AL,0DH INT 10H MOV AL,0AH INT 10H ENDM OUTX MACRO X MOV AH,09H MOV DX,OFFSET X INT 21H ENDM DA TAS SEGMENT USE16 BUF1 DB 'B08010530' BUF2 DB '11111' IN1 DB 20 DUP(?) IN2 DB 20 DUP(?) OUT1 DB 'please enter the username and the password:','$' OUT2 DB 'USERNAME:','$' OUT3 DB 'PASSWORD:','$' OUT4 DB '*','$' OUT5 DB 'ERROR!','$' OUT6 DB '----------WELCOME----------','$' ;此处输入数据段代码 DA TAS ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DA TAS,ES:DA TAS START:MOV AX,DATAS MOV DS,AX MOV ES,AX OUTX OUT1 CRLF OUTX OUT2 MOV BX,OFFSET IN1 MOV CX,20 LAST1:MOV AH,01H INT 21H MOV BYTE PTR [BX],AL CMP AL,0DH JZ JUMP1
INC BX LOOP LAST1 JUMP1: CRLF OUTX OUT3 MOV BX,OFFSET IN2 MOV CX,20 LAST2:MOV AH,07H INT 21H MOV BYTE PTR [BX],AL CMP AL,0DH JZ JUMP2 INC BX OUTX OUT4 LOOP LAST2 JUMP2: CRLF CMP1: MOV SI,OFFSET IN1 MOV DI,OFFSET BUF1 MOV CX,9 CLD REPE CMPSB JZ CMP2 OUTX OUT5 JMP EXIT CMP2:MOV SI,OFFSET IN2 MOV DI,OFFSET BUF2 MOV CX,5 CLD REPE CMPSB JZ SUCCESS OUTX OUT5 JMP EXIT SUCCESS: OUTX OUT6 EXIT: MOV AH,4CH INT 21H CODE ENDS END START
用户管理模块设计 用户管理模块提供对用户信息的管理,包括用户注册、用户登录、用户权限管理、用户信息修改以及用户等级修改。 1、用户注册 根据用户表,设计相应的注册页面,注册页面包括用户名、密码、邮箱、部门、电话等信息,当用户进行注册时,填写这些信息,用户名是不能与已注册的用户名相同,填写完成后,提交注册请求,后台相应的Action会响应该动作,首先获取到页面发来的参数,然后将这些参数通过Session对象写入到数据库中,最后向用户提示注册成功与否。 2、用户登录 用户注册之后,就可以通过账户和密码登陆至平台。当用户提交登陆请求,后台相应的Action会响应该动作,首先获取到页面发来的用户名和密码,然后通过Query对象查询该用户是否存在且密码正确,最后将根据结果给用户发送跳转页面,如果用户存在且密码正确,则可进入平台主页面,否则,提示登陆错误信息。 3、用户权限管理 用户权限管理将用户分为普通用户和管理员,他们具有不同的权限,他们各自的权限如表1所示。此平台首次使用时,会内置一个超级管理员,有修改用户等级的权限。 表1不同用户权限授权
定义一个权限拦截器,它的功能是用来检验用户类型,对每一个需要管理权限的操作均进行拦截,同时检验用户类型,判断该用户类型是否可执行该操作,即可达到权限管理的作用。如果某操作在当前用户等级对应的操作范围内,则可正常访问,否则跳转到提示页面,提示用户权限不足。 4、用户信息修改 用户管理模块提供用户修改自己信息的功能。当进入信息修改界面,首先会获取Session中当前用户信息,供用户在当前信息基础上进行信息修改。当用户填写完修改信息,并发送修改请求后,后台将响应用户的请求,首先得到所有用户修改参数,然后将修改的信息设置到该对象中,最后更新数据库,将更新结果发送给用户。
连接数据库验证用户登录信息 procedure TForm1.Image4Click(Sender: TObject);varADOQuery1: TADOQuery; begin{数据库操作:判断用户和密码是否正确}if (edit1.Text<>'') and (edit2.Text<>'') then //第一种情况:用户输入了用户名和密码 beginChDir(ExtractFilePath(Application.ExeName)); //转到当前EXE文件所在目录ChDir('..');//转到上级目录ExeRoot := GetCurrentDir; //获取当前目录.并存放于ExeRoot中DataFile := GetCurrentDir+'\Data\dzyv1.mdb' ; //取得数据库文件dzyv1.mdb的路径ADOQuery1:= TADOQuery.Create(self); //动态创建ADOQuery组件ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataFile+';Persist Security Info=False;';ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('se lect * from t_user where user_name="'+edit1.Text+'" and user_pass="'+edit2.Text+'" ');ADOQuery1.Open;if ADOQuery1.Eof then //数据集为空,即eof为true begin LogTimes := LogTimes+1; if messagebox(handle,'
昆明理工大学 信息工程与自动化学院物联网工程专业 2012年级 学生姓名:王永达 毕业设计(论文)题目:拍卖交易系统APP的设计与实现 【毕业设计(论文)主要功能】 1、用户注册模块:任何安装了该APP的用户都可以注册,成为客户; 注册页面需要用户提供真实姓名,密码,邮箱,手机号,性别信息,只有格式核对之后方可注册成功,正式成为可以使用该APP所有功能的客户。 2、客户登录模块:该应用要求客户参与竞拍之前必须先登录系统,以 保证拍卖交易的真实性和可靠性;注册页面需要用户输入手机号,密码进行登录,登录时可以选择记住密码功能方便下次自动登录,登录时需要向后台服务器发起请求,以验证该用户是否真实已注册成为客户,如果未注册过则提示需要先注册才能登录。 3、查看拍卖商品模块:注册用户可以登录成功之后可以查看拍卖中的商品和已拍卖完成的商品;显示拍卖商品界面包括两个Tab(正在拍卖,已结束),点击之后可展示各自的商品列表。 4、查看拍卖商品详情模块:客户可以选择感兴趣的拍卖商品点击进入 查看拍卖详情和商品的详情,并在该界面展示参与竞拍的入口。 5、参与竞拍模块:当客户点击参与竞拍按钮之后,便跳转到填写竞拍 信息界面(包括竞拍价,收货地址),竞拍成功之后便能接收到系统的相关提示并受到短信通知。
6、添加拍卖商品模块:客户不仅可以在该应用中参与竞拍,还可以主动发起拍卖信息;在添加拍卖商品界面,需要客户填写商品的相关信息(商品的名称,商品的种类,商品的图片上传,最低起拍价,发货地址),点击添加按钮,添加成功之后,则跳转到管理拍卖商品界面。 7、管理拍卖商品模块:在模块中客户可以删除或者修改已发布的拍卖信息(注:前提必须是没有人竞拍之前或者竞拍已结束之后) 【毕业设计(论文)主要技术】 1、Android客户端和服务器端的通信时采用JSON 作为数据交互格式。 2、Android客户端底层使用HttpClient和服务器端进行通信。 3、采用Bmob这一开源的云端服务器为移动应用提供所需要数据。
系统功能模块设计描述(样例) 根据前面对数据流的分析,本系统划分为两大模块:应用模块和管理模块。 应用模块是为整个用户提供服务的各个模块的总和,包括用户登录、在线测评、信息浏览(包括测评新闻、测评结果、系统帮助、测评指标等)、用户留言、修改密码、信息查询(包括用户信息和测评记录)等。 系统管理模块用来实现对整个系统的管理,包括测评指标体系与智能建议规则库的维护、测评监控、新闻管理、留言管理、用户管理、系统初始化、系统数据库备份等。 系统功能模块如图3.4.6所示,下面分别介绍如下。 (1)用户登录模块 本模块是用户进入系统的入口,用户登录时要经过身份验证,只有本校在册学生和教职工才可以登录本系统。本系统有学生、学生信息员、教师、同行专家、系级领导、院级领导、系级管理员、院级管理员八种用户角色,根据其身份及作用的不同,通过ID 和密码验证用户的身份,对不同级别的用户系统自动调用不同的可访问页面,使用系统提供的与其身份相应的各项功能,其他用户只可以浏览公开信息。 (2)在线测评模块 在线测评模块由学生测评、同行专家测评、系领导评价、信息员汇报组成,其中系领导评价、信息员汇报属于日常教学质量管理监控范畴,在统计教师的课程教学质量测评总成绩时,只计算学生测评、同行专家测评的成绩。 学生测评和同行专家测评需要在规定的测评时间完成,每学期一次。在测评期间,系统根据当前学期的开课表,自动列出当前登录的学生与所学课程、任课教师一一对应的被测课程一览表,学生每次从中选择一门课程进行测评,提交后成功后再继续选评其他课程,每门课程只许测评一次。学生一次登录未测评完的课程,可以在下次登录时续评。学生评教时分理论课程教学、实践课程教学、体育课程教学三类,每一类均由详细的评价指标构成,并列有指标权重;专家评教时采用与学生评教不同的测评指标体系。测评者可根据测评内容和评分标准直接点击选择项进行评分。每类测评页面都设有开放性指标,测评者可自由参与评价。为防止部分学生测评时马虎了事,系统对全部选最好或最差选项的结果不许提交,并要求重新进行测评,避免造成测评结果异常。 系领导评价每年度进行一次,系统根据教师所属系部,自动列出与系领导的测评关系,评价结果存入领导评价结果表中。信息员每隔一周汇报一次本班级的教学整体情况,汇报结果存入信息员汇报结果表中。 图3.4.6 系统功能模块结构图
详细设计说明书 1.1参考资料 【1】《概要设计说明书》 【2】《需求分析说明书》 2需求规定 2.1前台管理 1、用户注册 测试和维护及升级。 (登陆管理)设计说明 6.1功能 登录入口 取得用户名和密码 将UserID 存入session 中 查询用户是否存在 核对密码是否正确 登录成功 是 是 否 否
6.2性能 灵活性:窗口响应绝大部分的快捷菜单和控制面板操作 时间特性:响应鼠标单击的时间在2—3秒之间 6.3输人项 输入用户名和密码。 6.4输出项 输出是从数据库中读取的数据,或错误警告信息。 6.5算法 本部分没有采用自定义的算法。 6.6接口 .硬件接口:主要就是TCP/IP层中的网络接口层 软件接口:具体来说开发中可能使用到的ADO的常用对象有以下几个: (1)连接对象(Connection):用来连接数据库。 (2)记录集对象(RecordSet):用来保存查询语句的返回结果。 (3)命令对象(Command):用来执行SQL语句或者SQL Server的存储过程。 (4)参数对象(Parameter):用来为存储过程或查询提供参数。 6.7存储分配 本程序在高级语言JA V A进行编码,直接的内存分配由JA V A运行时分配。 6.8注释设计 说明准备在本程序中安排的注释,如: a.在代码部分的适当位置会有中文代码注释。 6.9限制条件 (1)由于本系统的开发将是基于浏览器的B/S 结构,所以浏览器端的语言使用HTML/CSS/JavaScript,服务器端的语言使用ASP(.NET),开发人员将不能用其他的开发
语言(编写组件除外)。而数据库也将随之采用SQL Server2005。 (2)开发人员在编写代码的过程中需要严格按照软件工程的要求来进行,以利于接下来的测试和维护及升级。
实验3.3.8 用户验证登录程序的实现 程序执行后,给出操作提示,请用户键入用户名和密码;.486 DA TA SEGMENT USE16 MESG1 DB '请输入用户名:',0DH,0AH,'$' MESG2 DB 0DH,0AH,'请输入密码:',0DH,0AH,'$' MESG3 DB '欢迎进入DOS系统!$' MESG4 DB 0DH,0AH,'---ERROR!$' BUF1 DB '1' LLL EQU $-BUF1 BUF2 DB '2' MMM EQU $-BUF2 BUF3 DB 15 DB ? DB 15 DUP(?) BUF4 DB 15 DUP(?) DA TA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DA TA BEG: MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;显示用户名输入界面 MOV AH,0AH MOV DX,OFFSET BUF3 INT 21H ;键入用户名 MOV BX,OFFSET BUF1 MOV SI,OFFSET BUF3+2 MOV CX,LLL NEXT1:MOV AL,[BX] CMP[SI],AL JNZ EXIT INC SI INC BX LOOP NEXT1 ;比较BUF1和BUF3 MOV AH,9 MOV DX,OFFSET MESG2 INT 21H ;显示密码输入界面 MOV CX,MMM MOV SI,OFFSET BUF4 NEXT2:MOV AH,7 INT 21H MOV [SI],AL
7 实现用户登录 >>>1 创建登录表单 登录表单的HTML代码如下: