如何提高技术?如何挣钱?如何同时多任务工作?如何开拓业务?如何维系一个相看两不厌的世俗关系?等等。
技术之路有很多很多,你去看一下GITHUB,可发现技术的路线多得跟米似的,又有一些自己都不会,现在流行什么语言就指什么语言,也就只能指到语言层面了。
很多人就开始绕弯路,学了几年还是没有进展。
其实,编程的技能,不花一定的时间反复练习,没有对路的师父在一旁冷眼旁观、及时棒喝,也很难领悟。有师父指路,少走三五年弯路,人生又有几个三年。
安全性验证
在课程最开始的时候,唐先生就问:我们登录之后的页面,就算不登录,知道网址也可以输入地址访问页面?有没有什么方法避免这个情况。
登录的目的就是避免非授权的访问。
开发环境:
VFP SP2 7423
祺佑三层开发框架(猫框)
中国古代的虎符
虎符是古代皇帝调兵遣将用的兵符,用青铜或者黄金做成伏虎形状的令牌,劈为两半,其中一半交给将帅,另一半由皇帝保存。只有两个虎符同时合并使用,持符者即获得调兵遣将权。
注意有两半,一半给将帅,一半是帝王。我们BS可以不可这样做,做一个虎符,一半在服务器(S),一半在用户浏览器(B),你访问时,我验证这个虎符是不是符合,符合让你访问
登录页面的升级
<form action="login.fsp?proc=login">
用户名:<input type="text" value="" name="username">
密码:<input type="password" value="" name="userpwd">
<input type="hidden" name="ispostback" value="1">
<input type="submit" value="登录">
</form>
<%=u(cMsg)%>
- 增加ispostback字段,目的区分首次提交和二次及以上提交
- 增加错误信息提示
vfp后端代码fsp
BS的虎符的实现
BS的虎符叫TOKEN,
为满足多人访问,且可以随时可以让TOKEN失败
我们用Guid来实现
GUID 是永不重复的字符串
- 验证用户名和密码服务器,生成一个GUID(token)存入表中,发送给浏览端
- 浏览端每次访问要往服务器提交这个GUID(token)
- 服务器的去验证这个GUID (token)
方法一
- 每次调用一个FSP(WEBPAI),往这个WEBAPI 传参
- WEBAPI接收这个参数,验证
方法二
- 登录成功之后,服务器获取GUID,存入表中,并写浏览器的COOKIE
- 每次调用,服务器读取Cookie 并验证
这就是所谓的Session,有些Session是放在服务器内存,有些放在数据库中,看具体实现了。
TOKEN 虎符有效期
一个Token 不能每次都能生效,我们必须给这个虎符TOKEN有效期。
验证不单单验证TOKEN是不是正确的,还要看有没有过期。
验证的时机 CTL类的init 方法
TOKEN表结构
DAL_TOKEN的设计
DAL代表数据访问类,DAL_TOKEN的类设计只有两个功能
功能一:
生成TOKEN
功能二:
验证TOKEN
生成TOKEN
验证Token
login.fsp改造
实现一个init 方法,类一旦加载,便会启动这个方法。(类默认方法)
试试效果吧
如果TOKEN 不存在,或者过期,就会出现这样的提示了
假如有班级信息,每个代码都要加上吗?
有很多FSP类,
班级
教师
学校
一个一个加很容易错,而且还容易漏掉。
不改动业务层,甚至不写代码的秘密
面向过程的程序员,在使用面向对象的语言,总是习惯把代码复制来得复制去的。觉得代码不就是这样子吗?
就没有想到面向对象就直接提升了一级思维层次。
这招可谓是降维打击!
设计父类ctl_public
ctl_ryxx类继承ctl_public
Define Class ctl_ryxx As ctl_public OF ctl_public.prg
即可实现继承了,即由原来的session 变成了 ctl_public
of 后面是PRG文件名
把原来的ctl_ryxx的中init 注释掉,试试效果吧。
以后新建的每个类都直接继承于ctl_public,即可拥有TOKEN验证的能力了。
更多资料:http://www.sn58.cn