zoukankan      html  css  js  c++  java
  • app端维持用户登录状态

    如何维持APP用户的登陆状态

    一。一种方式

    原文链接:http://ciniao.legu.cc/appcan/article_54.html

    这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种:

     (个人觉得不简单么)

    一:服务端默认的session

    这种方式最大的优点是服务端不用增加任何代码,但APP与网站不同,通常情况下,我们会希望APP的登陆状态能维持数天,甚至数月之久,大部分的服务端程序,都会在进程重启时或客户端多久不活动时,将session全部清空,致使状态丢失

    二、在客户端记录登陆用户的用户名和密码

    客户端在登陆时,判断如果服务端返回验证成功,则将用户名和密码(为了客户端安全起见,可以将password多次md5)保存到本地的localStorage中,然后每次HTTP请求时,将用户名和密码带到参数中,服务端每次都需要读取数据库判断合法性,会浪费一定的服务器资源,同时,因为密码保存到本地,带来了一定的安全风险。

    三:借助于数据库或文件系统等维持持久状态

    这种方式,是为了解决方法一中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的有效期

     二。类似第三方登录的方式

     OAuth2.0的refresh token

    或者微信公众平台的方式:

    http://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html

    三。app  利用memcached 保持登录

    http://www.zhihu.com/question/29714299

    http://www.blogjava.net/stevenjohn/archive/2013/04/03/397372.html

    http://ask.dcloud.net.cn/article/157

    四。安全角度:从安全和体验上解析移动App的登录

    不过个人建议你长期保持登陆

    这样安全性不好

    最好是 自动登录~提供自动登录

    至于session机制,也是需要服务器后台设置时长的。

    http://baike.baidu.com/view/3858474.htm

    http://tech.it168.com/j/2006-07-19/200607191220593_2.shtml

    哎,失误了,不用考虑后台该考虑的事情了。

    2015/12/03

    1.app端与server端的心跳包:长链接,适合TCP/IP

    http方式,后台session的自动延续,session设置超时时间,到期自动延续。app端不会出现session过期。

    2.Image的蒙层效果。

    实现点击图片(ImageView)变暗效果,有一个较简单的方法,就是将目标图片设置为背景图片(setBackground),再创建一个selector.xml文件,里面放置一张普通状态时的透明图片,一张点击状态下的棕色半透明图片,将其设置为ImageView的源图片。这样在点击ImageView时,源图片会变换透明度,达到变暗效果。但这种方法有个缺点:由于源图片已经被限制死了,假如我们需要自定义背景图片,将目标图片放置在背景图片上,就无法实现了。

    多用一个ImageView控件,半透明背景的,放在目标ImageView的上面,点击的时候换另一种透明度背景的。这个方法用了两层

    还可以通过滤镜和监听onTouchEvent事件来达到变暗效果的方法。关于滤镜,以后接触

    MissR:stay
    1
    0

    « 上一篇:Win10下Genymotion无法正常使用的解决方法
    » 下一篇:Activity之onWindowFocusChanged
        </div>
        <div class="postDesc">posted @ <span id="post-date">2015-11-26 21:36</span> <a href="http://www.cnblogs.com/permanent2012moira/">Matrix_Ran</a> 阅读(<span id="post_view_count">1819</span>) 评论(<span id="post_comment_count">0</span>) &nbsp;<a href="https://i.cnblogs.com/EditArticles.aspx?postid=4999030" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(4999030);return false;">收藏</a></div>
    </div>
    <script type="text/javascript">var allowComments=true,cb_blogId=134624,cb_entryId=4999030,cb_blogApp=currentBlogApp,cb_blogUserGuid='aeb42acd-501c-e211-aa8f-842b2b196315',cb_entryCreatedDate='2015/11/26 21:36:00';loadViewCount(cb_entryId);</script>
    


  • 相关阅读:
    nopCommerce中缓存学习
    EF
    路由
    webapi的加密方式
    生成N位数字随机数
    C# DataTable 转 实体类
    WebBrowser 打印
    文件上传控件,格式统一
    sqlserver 表循环-游标、表变量、临时表
    VB 老旧版本维护系列---迷之集合- dataTable
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551217.html
Copyright © 2011-2022 走看看