Login, cookie, session等概念理解

在网站或mobile开发时,最重要的模块之一就是Login登陆模块了。

对于开发而言,Login模块最常考虑的子模块就是:


1. 从数据库中获取登陆用户的信息,GetUserCredential

如userId, username, password, cookies, lastLoginTime, isKeepLogin及其他公司或身份信息。


2. 在用户输入或者从数据库中拿到username, password后,Login接口

常用接口定义及参数 Login(username, password, isKeepLogin)

进行登陆,一般的流程逻辑:

a. 删除旧的cookie和userid信息 (server就不会拿到带有完整cookie或userid的Login请求);

b. 将username, password, device time等信息发送给server,POST的请求方式。

c. server响应:server在验证完username,password以后,会传回更多的信息,最重要的就是userid和cookies,它们以后每次url请求都会被包含在http header中,是能否被server接受的关键信息. 如何登陆失败,那什么都拿不到,什么也都不记录。

d. 向数据库中增加或更新用户身份信息,username, password, userid, cookies, isKeepLogin等


3. RenewSession

在用户发送url请求时,会遇到401的信息。表明请求未被授权,及用户身份被被验证。

造成这种问题的原因有:

a. 在首次登陆时,表明用户名和密码其中之一或两者都无效,如输入有误、用户名暂时停用

b. session过期,需要重新登陆


这时可以尝试使用保存过的用户名和密码登陆一下,如果登陆成功,就再次刷新用户的身份信息,并且这种尝试方式,只能有一次。


4. Force To Web

在mobile开发时,还会遇到一种方式Force To Web,直接采用打开内置浏览器进行登陆的方式,这个时候,数据库需要保存web方式的cookie。


5. Logout

清除数据库中的userid和cookie及password,因为这些都是用户再次登陆需要输入的关键信息。


6. isLogin

判断是否已经登陆,可以判断数据库中的userid,cookie都存在。


8. 对于Login之前更多的信息,如公司、学校的选择等,无关个人的信息,需要更多的逻辑来处理login的流程。


*. 其他需要熟悉的概念

Http header域包含哪些信息:

UserAgent

Cookie

ContentType

AcceptLanguage


userAgent

各种软硬件的版本,是在http协议中,头域的组成部分,通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。

信息如:

"platform" : os平台,如iOS
"platform_version",os的操作系统版本
"carrier_code" :移动网络运营商的代码
"carrier_name" 

"device_name" : 硬件名称,如iphone6
"device_id" : 硬件id,ios可以从IdentifierForVendor获取,android可以从TelephonyManagerSecure获取。

"app_name" : app名称
"app_version"

"timezone" : 时区信息, 如"GMT+8","GMT-8"等标准信息

cookies有什么作用呢?

现在上许多网站都用新用户注册这一项,有时注册了一下,等到下次再访问该站点时,会自动识别到你,并且向你问好,是不是觉得很亲切?当然这种作用只是表面现象,更重要的是,网站可以利用cookies跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。例如,你在某家航空公司站点查阅航班时刻表,该网站可能就创建了包含你旅行计划的Cookies,也可能它只记录了你在该站点上曾经访问过的Web页,在你下次访问时,网站根据你的情况对显示的内容进行调整,将你所感兴趣的内容放在前列。这是高级的Cookie应用。

目前Cookies 最广泛的是记录用户登录信息,这样下次访问时可以不需要输入自己的用户名、密码了——当然这种方便也存在用户信息泄密的问题,尤其在多个用户共用一台电脑时很容易出现这样的问题。

如cookie信息可以包括user_id,传送给server


Session ID的载体是 Cookie,那session和cookie的过期时间的区别是什么?

 Session过期是服务器过期, 而Cookie过期是客户端(浏览器)来保证的, 即使你设置了Cookie过期, 这个只能保证标准浏览器到期的时候, 不会发送这个Cookie(包含着Session ID), 而如果通过构造请求, 还是可以使用这个Session ID的值.


如何设置一个30分钟过期的Session?

1. 设置Cookie过期时间30分钟, 并设置Session的lifetime也为30分钟.
2. 自己为每一个Session值增加Time stamp.

3. 每次访问之前, 判断时间戳.

实际使用场景的话, 比如30分钟就过期的优惠劵


什么是cookie,什么是session?

这篇文章中介绍的很详细:

http://www.cnblogs.com/songhan/archive/2012/07/23/2604299.html

简要来说

cookie是客户端保持状态的解决方案,session是保存客户端与服务端联系状态的解决方案。

摘抄:“cookie 和session 的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE

4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

5、所以个人建议:
   将登陆信息等重要信息存放为SESSION

   其他信息如果需要保留,可以放在COOKIE中”


猜你喜欢

转载自blog.csdn.net/viewcode/article/details/40539763