app开发中如何利⽤sessionId来实现服务端与客户端保持回话
这个问题太过于常见,也过于简单,以⾄于⼤部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常⽤的⽅法有以下⼏种:
(个⼈觉得不简单么)
⼀:服务端默认的session
这种⽅式最⼤的优点是服务端不⽤增加任何代码,但APP与⽹站不同,通常情况下,我们会希望APP的登陆状态能维持数天,甚⾄数⽉之久,⼤部分的服务端程序,都会在进程重启时或客户端多久不活动时,将session全部清空,致使状态丢失
⼆、在客户端记录登陆⽤户的⽤户名和密码
客户端在登陆时,判断如果服务端返回验证成功,则将⽤户名和密码(为了客户端安全起见,可以将password多次md5)保存到本地的localStorage中,然后每次HTTP请求时,将⽤户名和密码带到参数中,服务端每次都需要读取数据库判断合法性,会浪费⼀定的服务器资源,同时,因为密码保存到本地,带来了⼀定的安全风险。
wang li hong三:借助于数据库或⽂件系统等维持持久状态
这种⽅式,是为了解决⽅法⼀中session不持久的问题(如:将session保存的位置修改到⽂件或数据库),以及⽅案⼆中的安全性问题,不过这会降低服务端性能,或浪费服务端资源,代码逻辑流程如下:
数据库中,除了常见的user,password之外,额外增加⼀个字段,如:sessionID
玛丽 伊丽莎白 文斯蒂德在登陆接⼝中,如果判断⽤户输⼊的⽤户名密码正确时,⽣成⼀个随机字符串,保存到sessionID中,同时,客户端也将该值保存,在每次请求时,传递该值,服务端通过该值查询数据库,取得⽤户的⾝份信息。
四:密钥⽅式
以上三种⽅法,要么不能持久保存状态,要么不安全,要么每次请求都需要读取数据库验证,有没有⼀种⽅法,能解决以上的缺陷呢,于是,就有了这个⽅法,流程如下:
1:客户端输⼊⽤户名和密码,提交到服务端验证
2:服务端验证成功后,给客户端返回以下值:
关于雨的歌词uid : ⽤户的唯⼀标⽰
time : 当前unix时间戳
key : MD5(uid+time+"⼀个只有你⾃⼰知道的字符串密钥")
3:客户端保存以上3个值在本地,每次HTTP请求时,将以上3个值发送到服务端
4:服务端验证key,判断如果与客户端发送的key⼀致,则说明⽤户⾝份⽆误
中美贸易协定5:服务端每次收到请求时,通过当前时间-客户端time字段得到的差值,可以控制这个key的有效期
⼆。类似第三⽅登录的⽅式
或者公众平台的⽅式:
王浩信陈自瑶婚变>稀土部队三。app 利⽤memcached 保持登录
四。安全⾓度:
不过个⼈建议你长期保持登陆
这样安全性不好
最好是⾃动登录~提供⾃动登录
⾄于session机制,也是需要服务器后台设置时长的。
哎,失误了,不⽤考虑后台该考虑的事情了。
1.app端与server端的⼼跳包:长链接,适合TCP/IP
http⽅式,后台session的⾃动延续,session设置超时时间,到期⾃动延续。app端不会出现session过期。
2.Image的蒙层效果。
实现点击图⽚(ImageView)变暗效果,有⼀个较简单的⽅法,就是将⽬标图⽚设置为背景图⽚(setBackground),再创建⼀个l⽂件,⾥⾯放置⼀张普通状态时的透明图⽚,⼀张点击状态下的棕⾊半透明图⽚,将其设置为ImageView的源图⽚。这样在点击ImageView 时,源图⽚会变换透明度,达到变暗效果。但这种⽅法有个缺点:由于源图⽚已经被限制死了,假如我们需要⾃定义背景图⽚,将⽬标图⽚放置在背景图⽚上,就⽆法实现了。
多⽤⼀个ImageView控件,半透明背景的,放在⽬标ImageView的上⾯,点击的时候换另⼀种透明度背景的。这个⽅法⽤了两层
还可以通过滤镜和监听onTouchEvent事件来达到变暗效果的⽅法。关于滤镜,以后接触
发布评论