服务化一般流程
编 写:袁亮 时 间:2015-12-16 说 明:服务化的一般流程 一、理清功能点 1、找到业务对接人 2、找同类功能,其他家比较好的是怎么做的 3、确定功能,可能做什么,哪些不做,后期可能扩展 二、如果在已有的基础上升级 1、理清原来代码 2、什么地方,做了什么事 3、有哪些代码是冗余的 4、记录文档 三、数据字典设计 1、根据功能设计数据字典初稿 2、对照功能点,一个个的过,看是否能实现预期的功能 3、如果后期要升级,是否好扩展 4、业务方面能支持的情况下,看是否会有性能瓶颈 5、是否需要增加冗余字典,查询优化 四、接口列表划分 1、根据需求,罗列接口列表 2、重新审查接口列表,是否有重复的 3、不同接口之间是否有部分做的同样的事,是否需要抽离 4、重新根据功能进行接口聚合,分类,整理完整列表 5、拿着接口列表,分别看看需求和现有功能是否能满足 6、给出完整确认的接口列表 五、定义接口 1、根据接口列表写注释 2、需要输入哪些参数,分别代表什么意思 3、这些参数需要做哪些格式验证 4、业务方面需要做哪些验证 5、非查询条件,需要做哪些数据更新操作 6、接口返回什么 六、根据接口定义写代码 1、根据接口定义,编写代码 2、写相应的demo,测试各种情况 3、监控查看接口返回是否正常 4、后期做成能自动监控 七、接口文档 1、编写apidoc需要的注释 2、生成apidoc文档 3、更新到文档库 4、查看文档是否有错误 八、旧项目升级 1、如果是从旧项目升级,需要将旧数据,写脚本导入写服务中 2、旧的代码中,所有涉及到这块的,根据之前列的文档,一个个的改成接口调用 3、改动一处,即进行完整测试,并做相应标记 4、全部改完之后,整体测试 九、上线 1、代码上线前,将旧数据转换脚本启动,并跑完 2、代码通过版本控制器上线,同时转换脚本开启,避免上线过程中产生的新数据未同步 3、上线测试是否正常,并重点关注error_log 4、查看旧数据库是否还有数据新增,以及新数据库数据增长是否正常 5、查看接口监控日志,是否有异常调用 6、关注用户反馈,自己多测几次正常流程,特别是涉及到改动的地方
移动端前端注意事项
整 理:晋哲 时 间:2015-12-09 说 明:移动端页面需要注意的细节问题 一、移动端固定<meta>标签 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="format-detection" content="telephone=no"> 解释: 第一个meta标签表示:强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览; 第二个meta标签是iphone设备中的safari私有meta标签,它表示:允许全屏模式浏览; 第三个meta标签也是iphone的私有标签,它指定的iphone中safari顶端的状态条的样式; 第四个meta标签表示:告诉设备忽略将页面中的数字识别为电话号码 二、细节样式处理,去除移动设备默认交互样式 1、解决 iPhone 横屏时默认会放大文字的问题,设为100%关闭字体大小自动调整功能 html{ -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; text-size-adjust: 100%; } 2、使用无衬线字体 body{font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif;} 3、禁止选中文本(有无文本选中需求,此为可选项) html, body{ -webkit-user-select: none; user-select: none; } 4、快速滚动和回弹的效果 body{-webkit-overflow-scrolling: touch;} 5、禁止长按链接与图片弹出菜单 a, img{-webkit-touch-callout: none;} 6、去除移动端点击事件出现的背景阴影,也可更换颜色 a, input{-webkit-tap-highlight-color:transparent;} 注:还有一种妥协的方法是把页面非真实跳转链接的<a>标签换成其它标签,可以解决这个问题。 7、移动端清除输入框内阴影 在iOS上,输入框默认有内部阴影,但无法使用 box-shadow 来清除,如果不需要阴影,可以这样关闭: input, textarea{ border: 0; /* 方法1 */ -webkit-appearance: none; /* 方法2 */ } 8、输入框点击默认会有蓝色外边框线 input{outline: none;} 三、HTML 代码相关 1、自适应布局模式 在编写CSS时,不建议把容器的宽度、高度定死。为达到适配各种手持设备,建议使用自适应布局模式,保证页面在各类浏览设备上都能够正常的显示,无需再次考虑设备的分辨率。 2、块级化<a>标签,或按需求尽可能扩大<a>标签囊括的范围 在触控手机上,为提升用户体验,尽可能的保证用户的可点击区域较大。 3、动画效果中,使用 translate 比使用定位性能高 四、JS 事件相关 1、jQuery文件过大,移动端优先考虑使用zepto.js。实际情况中使用jQuery插件不兼容zepto时再考虑使用jQuery 2、click 事件存在 300ms 的延迟 在手机上绑定 click 事件,会使得操作有 300ms 的延迟,体验并不是很好,通常会使用封装的 tap 事件来代替 click 事件。 五、图片相关 1、使用<img>标签时,需根据实际需求设置[width:100%;]自适应撑满区域,还是设置固定宽高。 2、使用背景图片时,需注意实际用图与移动端呈现尺寸的比例为2:1,所以移动端借助[background-size]属性进行比例缩小,相应的按比例缩小[width]、[height]、[background-position]的值。 3、可以合并的图标图片,尽量整合一张,并进行压缩 4、合并Sprite图时每个图片之间必须留有间距 5、能用CSS样式实现的,代替使用图片 6、较大的背景图片、banner图片等尺寸宽度不需要超过640px,切图时先改变图像大小,再进行压缩。
linux上安装node.js
说明:
使用CentOS系统,进行node.js安装,node.js版本- v0.12.0。
1,先下载node.js:
# wget http://npm.taobao.org/mirrors/node/v0.12.0/node-v0.12.0.tar.gz
//用的淘宝镜像,更快
2,解压文件
# tar xvf node-v0.12.0.tar.gz
3,进入解压目录
# cd node-v0.12.0
4,检查所需要配置
# ./configure
5,如出现以下错误,安装gcc-c++ (安装较新的版本可能会出现)
注意:线上服务器请勿随意升级,建议尝试其他版本的 node.js!!!!!
出现错误提示:
# yum install gcc-c++
如无,请跳过
6,进行安装(时间比较长):
# make install
7,检查是否成功安装,输入命令:
# node -v
如果安装成功会输出相应版本号,如:
8,现在可以创建一个test.js文件进行测试,文件内容为:console.log('Hello World.');
输入命令:
# node test.js
输出:
育网专题评论区改版
整 理:肖雅君
时 间:2015-12-04
更 新:2016-02-26
说 明:育网专题PC端和WAP端使用本公司开发的评论区修改步骤
PC端和WAP端评论区改版
头部+导航+底部+评论区
以前PC端和手机端的的评论部分都是用的“畅言”(畅言是搜狐推出的社会化评论及聚合平台)。但以后育网专题都会采用育儿网仿畅言做出来的评论。暂时尚未做成后台,所以需要前端手动添加各种文档、修改参数。
- 公共头部
简介:育网公共头部,包含导航和登录的php文件以及头部样式引入。
添加方式:无需拷贝文件,无需改变路径,只需要在对应位置添加两串固定代码。
添加位置:
<html>
<head>
<?php include "../global/meta.php";?>
</head>
<body>
<?php include "../global/header.php";?>
</body>
</html>
2.“评论”部分
(1)引入评论:
在<!DOCTYPE html>前添加如下代码:
<?php
include_once('../include/global.php');
$id = 11742336;//帖子ID
?>
(2)修改方式:
后台操作:
专题后台链接:http://www.ci123.com/special/sadmin/clearup_list.php?page=4
编辑那边通过后台发布的评论页面有可能是.html文件,(如:http://www.ci123.com/special/sadmin/recommend/recommend.php?code=piyao-ceqie.html),.html文件对应的是“畅言”的评论。
转成育网评论需在后台操作,步骤如下:
将“是否使用妈妈社区评论”选择“是”:
本地操作:
第一步:在index.php中添加两个样式文件(固定链接):
在index.php的<head>部分添加“左侧评论块”和右侧“专题推荐”部分的样式文件:
<link rel="stylesheet" href="http://www.ci123.com/special/dajiashuo-pc/styles/reply.css">
<link href="http://www.ci123.com/special/recommend/css/recom-wqhg.min.css" rel="stylesheet" type="text/css">
(*注:“dajiashuo-pc/styles/reply.css”是公共样式,部分专题都已使用这个样式,除非所有的专题评论区都存在共性的问题,否则不得直接修改这个样式文件。只能在自己写的样式文件里写入新样式覆盖dajiashuo-pc的样式。)
第二步:引入评论区:
在index.php的评论部分添加如下代码:
<?php include_once("../recommend/piyao-ceqie.php");?>
第三步:修改帖子ID【重要】
【重要】不同专题的帖子ID是不一样的。同一个专题的手机端和PC端的帖子ID是同样的。
二、WAP端
1.添加手机端评论样式
WAP端只需添加一个样式文件。
<link rel="stylesheet" href=" http://m.ci123.com/special/dajiashuo_wap/styles/reply.css">
2.顶部
包括:PC端/WAP端的链接跳转,育网APP分享,代码如下:
<?php
include_once('../inc/global.php');
if(getOsNew()== 'pc'){
header('Location:http://www.ci123.com/special/survey-ceqie/');//链接为专题PC端的链接
exit;
}
$post_id = 10724610;//帖子ID,重要!每一期都要修改
$url = '专题手机端的访问链接';
$share_pic = '专题分享图片';
$msg = '专题分享文案';
$title = '专题标题';
?>
<!DOCTYPE html>
<html>
</html>
3.底部
包括:评论部分+制作团队+“妈妈社区APP推广”+底部版权
重点是评论以及“妈妈社区”,代码如下:
<div class="weibo">
<div class="say"><i></i><span>大家都在说</span></div>
<?php include_once('../inc/reply.php');?>
</div><!--weibo-->
<div class="part-team">
</div><!-制作团队-->
<?php
if($_COOKIE['uid']>0&&strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') === false){
?>
<?php } else {?
<a href="http://app.ci123.com/down/bbs.php?type=2" class="app_pro">
<img src="http://m.ci123.com/special/piyao-gudaiyunyu/images/download.png" width="100%">
</a>
<?php }?>
<div class="footer">
</div><!--版权所有-->
简介:手机端另一个和往期专题不同变化是分享。
现在的分享采用两种方式,一种是在微信朋友圈推广,采用微信自带的分享方式。另一种是在妈妈社区APP或是育网APP上的分享按钮。
后端已对这两种方式进行了处理,只有在APP上才会显示分享按钮,微信上并不显示。
但是前端这两种方式都要顾及到,所以需要前端修改两个地方的分享文案。
添加方式:
1.添加微信分享:
在index.php中添加如下代码:
<!--微信分享内容区域-->
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script src="http://m.ci123.com/special/weixin/wx_share.js"></script>
<script type="text/javascript">
$.getJSON('http://m.ci123.com/special/weixin/getAuth.php?PackageUrl='+encodeURIComponent(window.location.href),function(data){
callWeiXin(data);
wxShare('侧切会影响产后“性福”?','顺产侧切真的会影响产后性生活吗?《育网辟谣》告诉你真相!','http://m.ci123.com/special/piyao-ceqie','http://m.ci123.com/special/piyao-ceqie/images/share1.jpg');
});
</script>
<?php include_once('../inc/app_share.php');?>
<!--end 微信分享内容区域-->
CSS3 Transform 转换属性
整 理:徐秀、晋哲
时 间:2015-12-04
说 明:CSS3 Transform基本语法以及基础用法的介绍。
一、名词解释
transform字面上就是变形,改变的意思,包括2D transform和3D transform。在CSS3中transform主要包括以下几种:移动translate()、旋转rotate()、扭曲skew()、缩放scale()以及矩阵变形matrix(),对内联元素(inline)和块级元素(block)都适用。
二、浏览器兼容性
注意:transform是CSS3新属性,目前兼容浏览器【盗图】:
和其它CSS3新属性一样,transform要加兼容前缀。
三、transform-origin属性
transform-origin在元素发生transform变换时有效,是发生变换的基点,以此点建立【2d/3d】坐标。默认值为:transform-origin:50% 50% [0]; 第三个参数是3d转换下z的值,默认0。当改变transform-origin的值时,transform参照基点发生改变,如: transform-origin:0 0;
其中X和Y的值可以是百分值,em,px,其中X也可以是字符参数值left,center,right;Y和X一样除了百分值外还可以设置字符值top,center,bottom。
四、语法讲解
值 | 描述 |
none | 定义不进行转换。 |
matrix(n,n,n,n,n,n) | 定义 2D 转换,使用六个值的矩阵。 |
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) | 定义 3D 转换,使用 16 个值的 4x4 矩阵。 |
translate(x,y) | 定义 2D 转换。 |
translate3d(x,y,z) | 定义 3D 转换。 |
translateX(x) | 定义转换,只是用 X 轴的值。 |
translateY(y) | 定义转换,只是用 Y 轴的值。 |
translateZ(z) | 定义 3D 转换,只是用 Z 轴的值。 |
scale(x,y) | 定义 2D 缩放转换。 |
scale3d(x,y,z) | 定义 3D 缩放转换。 |
scaleX(x) | 通过设置 X 轴的值来定义缩放转换。 |
scaleY(y) | 通过设置 Y 轴的值来定义缩放转换。 |
scaleZ(z) | 通过设置 Z 轴的值来定义 3D 缩放转换。 |
rotate(angle) | 定义 2D 旋转,在参数中规定角度。 |
rotate3d(x,y,z,angle) | 定义 3D 旋转。 |
rotateX(angle) | 定义沿着 X 轴的 3D 旋转。 |
rotateY(angle) | 定义沿着 Y 轴的 3D 旋转。 |
rotateZ(angle) | 定义沿着 Z 轴的 3D 旋转。 |
skew(x-angle,y-angle) | 定义沿着 X 和 Y 轴的 2D 倾斜转换。 |
skewX(angle) | 定义沿着 X 轴的 2D 倾斜转换。 |
skewY(angle) | 定义沿着 Y 轴的 2D 倾斜转换。 |
perspective(n) | 为 3D 转换元素定义透视视图。 |
未经transform转换的div,以下各种变换均以此为参照:
- transform:translate();
通过指定translation(tx,ty)进行矢量偏移,translation3d(tx,ty,tz);参数tx 是x轴方向的偏移矢量,ty 可选参数是y轴方向的偏移矢量。translation3d()中的各值,表示在对应方向的偏移量。tx,ty,tz的取值可以是具体的像素值,也可以是百分比,百分比的的取值相对于自身的宽高。translate(),表示对对象进行平移,当值为负数时,反方向移动物体。分别指定指定轴上的偏移量可以。通过transform-origin属性改变基点。
其它写法:translateX(x)【适用于2d/3d】,translateY(y) 【适用于2d/3d】;translateZ(z) 【适用于3d】,
- transform:rotate();
通过指定的角度参数对指定元素指定一个rotate(angle)进行2d旋转,rotate3d(rx,ry,rz,angle)进行3d旋转;rx,ry,rz可以取【1:正方向;-1:反方向;0不旋转】;在指定方向选择angle度; angle是指旋转角度,如果设置的值为正数表示顺时针旋转,如果设置的值为负数,则表示逆时针旋转。可以通过transform-origin属性改变基点。
其它写法:rotateX(angle) 【适用于3d】;rotateY(angle) 【适用于3d】;rotateZ(angle) 【适用于3d】
代码:效果:
- transform:scale();
通过指定scale(sx,sy)的sx、sy参数对指定元素进行2d缩放; scale3d(sx,sy,sz)进行3d缩放。2d缩放的第二个参数可选,未提供,则取与第一个参数一样的值;3d的三个参数都必写,表示在对应方向的缩放比例。可以通过transform-origin对元素的基点进行设置。
其它写法:scaleX(x)【适用于2d/3d】,scaleY(y) 【适用于2d/3d】;scaleZ(z) 【适用于3d】。
通过指定skew(x-angle, y-angle)的x-angle、 y-angle参数对指定元素在指定方向上发生倾斜; skew()没有3d写法;x-angle是水平方向扭曲角度,y-angle可选,是垂直方向扭曲角度。如未设置y-angle,那么Y轴倾斜角度为0deg。
其它写法:skewX(x)【适用于2d】,skewY(y) 【适用于2d】。
代码:效果:
- transform: matrix ();
matrix():2d矩阵包含6个值matrix(a,b,c,d,e,f);3d矩阵包含16个之matrix(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)4*4个值,以上的各种变换(2d/3d),都可以矩阵计算得到相应效果,单计算过程很复杂,此处就不赘述了。有兴趣的小伙伴可以自行学习下。
后台产品上新和新闻稿更新
整 理:徐秀、肖雅君
时 间:2015-12-04
说 明:精工后台的操作及注意点,包括精工腕表产品和新闻稿模块的更新。
后台地址:
http://www.seiko.com.cn/M/Login.aspx?ReturnUrl=%2fm%2findex.aspx
精工的腕表产品和新闻稿更新都在后台进行操作。
1) 对应线上的网址:
产品展示:http://www.seiko.com.cn/collections/index.aspx页面下各类别腕表产品页。
2) 新闻资讯:http://www.seiko.com.cn/press_release/index.aspx下的新闻页。
一、产品上新
- 图片制作
要求:一张大图(一般为:300 x 300,视情况而定),一张小图(一般为:42 x 75)。图片一律约束比例缩放,不得变形。以线上该系列下的最新(第一个) 产品图片为模板。【产品上新时,精工发的邮件会包含,一个包含所有新产品信息的excel表格和高清新产品图片,如果没有图片,记得跟他们要,因为excel表格上的图片处理完就糊了。】举个栗子:
1)精工发来新产品:
在官网”产品展示”---“premier”---“7D46・7D48・7D56机芯”点击弹出如下页面。
下载第一个产品的大图和小图为参考模板。图片的高度和宽度要与线上的一致,”new”的位置,以及图上下的留白区也要一致(可借助PS的参考线来确定图片内容位置;)
方法:
1)模板图片上下左右内容区做好参考线,删除图片内容,保留”new”,做成空白模板;
2)把新图片的上下空白区域裁剪掉,然后根据模板的内容区高度(一般为292px),ctrl+alt+i约束比例确定高度复制到模板区域,调整上下边距【一定要注意】,左右保证居中即可。
PS:找不到该系类咋办【情况非常少】?它是一个新系列,精工邮件会有说明,参考相邻系列的产品图片呗。但多了一项任务,还要制作这个系列的代表图片,尺寸参考相邻系列代表图片。如:
- 登录后台上新
2) 确认是否线上已有该系列,没有要先添加“产品系列”。点击侧栏”产品系列管理”---“新增”。
根据excel表格中的内容填写下面各项,“保存”。ps:后台操作一保存,精工官网立马显示,一定要慎重检查再保存。检查点【系列款式是否正确,文字描述是否有错字】
3)线上已有该系列,跳过2),在侧栏选择“产品管理”---“新增”。弹出:
PS:从上到下依次填入所提到的点,写完之后,注意检查再保存。检查点:
- 所属列表、款式、机芯系列是否正确。
- 产品名称是否和文档一致。
- 显示顺序的数字是否正确。
- 图片是否正确,简介是否有错字。
如果SNP126J1的“显示顺序”号为10,则SNP127J1顺序号:11,SNP128J1:12;SNP129J1:13。
二、新闻稿上新
- 登录后台
1) 侧栏点击“最新资讯管理”—“新增”
2) 根据精工发来的word文档的排版。进行如下操作,“保存“。
PS:各项填完之后,检查以下问题再保存。
- 如果有遇到无法解决的排版问题,参考线上相似新闻稿;
- 未确认排版前,日期最老,使新闻稿不容易被访问到;
- 为防止代码错乱,建议在”代码模式”下写新闻稿;
- 保存后,对比word文档,查看图片显示位置是否正确,是否有错别字,特殊符号(如英文人名中间的圆点等)是否与word一致。
- 修改首页入口链接
新闻稿确定保存后,要到精工服务器的首页相应位置添加新闻资讯的链接。【很简单,主要是复制粘贴改链接。】
1) 登录服务器---找到精工首页的”aspx”文件,备份两份,打开测试的aspx文件,ctrl+f查找【id=”whatsnew”】,复制一个完整的标题和链接部分,只有修改标注部分,链接、和标题,以及新闻发生月份。链接是导航条上“最新资讯“下,你刚更新的新闻稿的网址,格式参考往期。【再添加一个新链接,要删除最下面一个旧链接,不然会有溢出。】
2) 修改完之后在首页“最新咨询”,弹出框测试,测试链接是否正确。
php文件包含路径问题
编 写:袁 亮 时 间:2015-12-01 说 明:php文件包含路径问题 一、解决什么问题 1、在某些项目代码中,会出现包含出错问题 2、多次include的时候,会发现不知道包含的到底是哪个文件 3、某些项目代码中,找不到对应include进来的文件 二、前置知识:3种路径 1、绝对路径 linux下,以/开头的路径 window下以盘符开头的,比如c:/ 2、相对路径 以.或者..开头的路径 3、不确定路径 非上述两种情况的都是 三、包含路径include_path 1、这是一个目录列表 2、在php查找文件的时候起作用,主要是以下这些函数 include,require,fopen,file,readfile,file_get_contents 3、查找文件的时候,会根据include_path中的目录列表一个个去找,找到之后中止返回 4、功能类似系统中的环境变量 5、可以通过php.ini或者php代码中进行设置(也可以通过php函数读取) 6、默认值是. 代表当前工作目录(简单来说就是访问的第一个php文件所在的目录) 四、查找要包含哪个文件 1、包含的是绝对路径的文件 与include_path无关,直接引用绝对路径所对应的文件 2、包含的是相对路径的文件 跳过include_path,根据工作路径拼接上相对路径,查找文件,如果有则包含,没有则报错 ps:工作路径即访问的第一个php文件所在的目录 3、包含的是不确定路径的文件 3.1 逐个使用include_path中的目录跟不确定路径拼接查找文件,找到则退出 3.2 如果没有找到,则根据包含语句include所在的文件的目录,拼接上不确定路径查找文件 3.3 如果还是没有,则报错 五、解决方案 1、项目的一个公共文件,通过__FILE__,或者__DIR__(php 5.3后),结合dirname来计算获取项目根目录 2、所有文件包含,均通过项目根目录进行拼接,得到绝对路径,再包含 3、使用不确定路径包含文件 3.1 使用不确定路径,包含当前目录或当前目录的子目录下的文件 3.2 这种方法性能较差,因为必然是经过多次查找才能得到 3.3 而且在项目工作目录出现同名文件,则会出现包含到错误文件的情况 3.4 常见于sdk包,一般情况下少用 参考文档: 1、PHP中require和include路径问题详解 http://www.cnblogs.com/rainman/p/4177302.html 2、PHP手册 http://php.net/manual/zh/ini.core.php#ini.include-path http://php.net/manual/zh/function.set-include-path.php
关于include_path使用说明
整 理:朱 兵 时 间:2015-11-30 说 明:关于include_path使用说明
修改php.ini文件中的include_path项。
编写程序时可以用常量 PATH_SEPARATOR 代替
ini_set('include_path', '/usr/lib/pear');
三、运行时包含的顺序
1.如果为绝对路径,则直接包含, 并结束(找不到直接退出).
2.如果是是相对路径((形如./file, ../dir/file),则跳过include_path的作用逻辑, 直接解析相对路径(找不到直接退出)
3.都不是以上两种情况
会根据include_path,和当前执行文件的path组成一个待选的目录列表
注意点:
1、如果在指定的目录下找不到所要求包含的文件,而在当前页面目录下正好存在这个名称的文件时,则默认引入当前目录下的该文件。
2、当指定了多个目录为 include_path ,而所要求包含的文件在这几个目录都有相同名称的文件存在时,php选择使用设定 include_path 时排位居前的目录下的文件。
四、php手册中的相关函数
使用token来解决用户信息同步问题
编 写:袁 亮 时 间:2015-11-27 说 明:多应用系统用户信息统一安全升级策略 一、问题 1、post请求之后,后退按钮导致加载失败,提示需要重新提交数据问题的解决 2、用户信息被抓包,会导致账号泄漏问题 二、原因 1、根据http协议,post请求非幂等,不能缓存,因此有响应头Pragma:no-cache 2、后退的时候,浏览器会强制提醒用户,确认是否重新输入数据 3、因此后退会出现白页 三、可能解决思路 1、post请求换成get请求,绕过限制 1.1 私密数据不安全,如果链接发给其他人,会导致账号被盗 1.2 统计代码中,会把这些链接都给存储下来,太危险 2、对get的数据进行可逆加密并加过期时间 还是解决不了上面的两个问题 3、先post发送私密数据过去,然后get跳转 四、完整思路 1、私密数据,必须要走post,不能get 2、先通过服务器间请求,将私密数据post过去 2.1 在客户端对数据进行签名及有效期 2.2 通过post将数据通过服务器与服务器传输 2.3 服务端返回该数据存储的token(类似session存储) 为防止服务器返回较慢,导致token丢失,token以客户端传过去的签名为准 2.4 该数据,只存储一个小时,超过则失效 3、get形式带上token去请求数据 3.1 根据token,取到对应的数据 3.2 用户之后的token要删除,不允许重复使用 3.3 取出的数据需要验证是否有效期内,并验证签名是否正确 4、解决了哪些问题 4.1 没有通过get传输私密数据 4.2 浏览器没有发起post请求,因此不存在后退刷新的问题 4.3 私密数据通过服务器间的post请求,因此对用户抓包,并不能获取到这份私密数据 抓更原始的包那就没办法,虽然不知道原始数据,但还是能登陆到用户账户上 5、导致的问题及解决办法 5.1 比之前多了一次http请求,会变的更慢 在相应的服务器端加host,降低解析时间(同一机房,走内网) 服务端只做数据存储到内存,不做额外操作降低运行时间 客户端设置超时,防止卡住 5.2 memcache存储的数据,存在一定几率丢失 可以暂时不考虑,概率太低,而且最坏的影响也就是用户某一次可能登陆不上(只有新用户) 5.3 token丢失或被抓包 32位的加盐散列,基本可以不考虑被暴力强刷 token即使丢失,问题也不大,因为token生成之后,用户基本上马上就使用,之后token就失效了
使用范例见附件:build_query