最近完成的一个股票信息管理系统的总结:
由于对安全性健壮性要求比较高,因此我们必须考虑很全面,对于货币的合法性计算等问题就不一一总结,只需在验证过程中严格限制用户输入数据即可。
- 一般管理页面是框架,各种分管理页面都在iframe或frameset中,因此限制只能浏览框架页面(如main.asp),其他页面必须在main.asp框架内。
方法:每个分页面加上
window.onload=function(){
if(top==self){
top.location="main.asp";
}
}
- 可能我们需要主页面main.asp为弹出的全屏页面,可以限制main.asp只能为弹出页面并在弹出后关闭打开它的页面。
方法(注意只针对ie,在ff下刷新会出现opener丢失(null)的情况:
if(navigator.userAgent.indexOf('MSIE')>-1){
if(!opener){
window.open('main.asp','','location=no,status=no,toolbar=no,scrollable=yes,resizable=no');
window.close();
}else{
opener.close();
}
}
-
每个页面开始出增加权限验证(如check.asp)来检验用户访问权限。
-
及时检验客户端用户输入数据的合法性。
-
及时根据用户选择选项的不同或输入不同在客户端及时更新显示用户应该得知的信息,隐藏不应该显示的内容,防止用户误理解或误操作。
- 提交数据前检验输入是否为空或是否合法。方法:在submit按钮上添加onclick="return checkForm()"
- 检验提交的数据后如果需要用户再次确认提交可以使用return confirm(...)。
- 判断一个对象的属性是否存在不能直接使用if(!obj.property){...},因为一个元素的属性值可能为0这样也会返回true。所以应该使用if(obj.property==undefined){...}
- 对于货币的转换:一般保留小数点后两位有效数字,多于的位数四舍五入。使用number.toFixed(2)即可。数字2代表保留的小数位数。
- 对于计算过程中出现了异常或非法结果应及时反馈用户并清空用户当前输入,如货币计算结果出现负数或除数为0等。
- 对于刚载入页面时如果需要根据页面某处的值显示不同效果应该使用
window.onload=function(){
if(...){
...
}
}
-
对于一些需要进行关联显示的数据,可以采用json,这样方法简单且安全准确。json数据可以在服务端生成。
=@@=如根据用户id获取相应的金额的一个json例子。
var userMoney={'code8':'5709','code7':'3576','code6':'38454.66'};
注意此处code8代表用户id为8的用户,因为对象属性或方法不能是数字开头,所以在服务端生成时应该带上相关字母或下划线或$。
这样访问id为8的用户的货币可以使用userMoney.code8,如果需要根据用户选择的id不同获取不同值可以这样:eval("userMoney.code"+userid)
=@@=对于多重关联,如果只需访问最后一层的值,如:如果需要访问特定用户特定股票的股数可以在服务端组合数据生成json。
例:var userRemain={'u8_c1000001':'5','u8_c2342342342':'0','u7_c1000001':'0','u7_c2342342342':'0','u6_c1000001':'0','u6_c2342342342':'0'};
此json数据生成办法:循环读取用户id(用字母u表示),然后对于某个id在循环读取该用户所有股票类型(用字母c表示)及对应的股数,然后组合:"'u"+userid+"_c"+cateId+"':'"+count+
这样在客户端读取的方法同服务器端生成方法一样重新组合并读取即可。
- 在页面加载速度比较慢的情况下,可能出现js访问页面后面的变量或后面的页面元素时出现“找不到对象”的错误提示,解决办法在head区的js中加上
window.onerror=function(){
location.reload();
}
这样就可以使页面在出现错误时重新加载,由于之前的缓存下次加载会比较快也就不会出现对象访问不到的情况。