session和cookie的学习总结



## seesion和cookie的使用和学习总结




#### 问题的提出:如何让用户登陆了系统之后,在以后的一段的时间内不再需要登陆认证了呢?

首先要需要知道为什么会有这个问题,我们先来了解一下web服务器和浏览器之间的交互方式。

众所周知,web服务器和浏览器之间都是使用http协议来进行交互的,那么我们就先来简单了解一下http协议吧

http协议是建立在tcp上的一个应用层协议,而且它的消息体都是可见的asc字符,

浏览器向web服务器发出“GET”“PUT”的http消息报。

web服务器依据浏览器的请求回复一系列的内容。

http有个最重要的特点是无状态的,什么是无状态的呢?

无状态就是表示浏览器向服务器发起一次tcp连接,服务器向浏览器回复了之后,tcp的连接就断开了,当浏览器再次访问的时候,服务器就不记得你了,就像失忆了一样,
这就是说,服务器不管你是谁,你来了我就根据你的请求回复你就行了,这就叫做无状态。
由于http的无状态性,服务器会把每一次的连接都当做未知的请求,所以一般的情况下,你就不能一次登录,多次免登陆。


好了,这下我们知道了问题的由来,那么要怎么才能解决我们提出的问题呢?
我第二次访问服务器的时候,服务器他妹儿的就不认识我了,那我怎么才能不需要登录就可以进行活动呢?



我们来转换一下想法:

比如说你去网吧上网,每一次都需要叫网管,给网管钱,然后让网管开机。



我们的问题和上面那个例子做对比,
我们把网管那部分比喻成登陆系统,把你上网的部分比喻成服务器提供的服务,
我们现在不想每次都叫网管了,怎么办?

有了生活中的例子做比较就方便解决我们在文章头提出的问题了,我们怎么样才能一次登录,多次享用呢?

我们都知道网吧有个东西叫做会员卡,你只需要办理一张会员卡,冲一些钱进去,你从此就不需要叫网管了
进去直接找台电脑上网就行了。
所以同理,我们需要服务器给我们一个会员卡,这样子每次上网只需要亮一下会员卡就行了。

会员卡是网吧提供的,所以我们要解决上面的问题,就要求服务器必须有能力提供“会员卡”的功能,

会员卡是放在我们身上的,所以我们要解决上面的问题,也要求客户端有存放“会员卡”的功能。

这下子我们就明了。我们要实现这样的功能就要求服务器和客户端分别满足上面的要求就是了。

所以,我们的主角登场了,cookie&seesion
cookie就是服务器放在客户端的一小块文本,cookie就是我们的会员卡!


cookie在客户端是如何存放的呢?
在客户端里面会将用户访问过的所有的cookie存放在一起,有点像“卡包”的感觉,每当客户端访问服务器的时候,客户端就直接把“卡包”给服务器,服务器需要在卡包里面
找自己的那张“会员卡”。

session也是依靠cookie实现的,

从上面关于cookie的介绍知道了,cookie确实不怎安全,因为它把所以的会员卡信息都保存在客户那里,客户还会把“卡包”一次性的给别人?!!

这怎么能忍?!

所以session就是为了解决这个问题出生的。

session就是直接给客户端一个连客户端都看不懂的一大串的字符串,相当于全球唯一的id,这id号就别人都仿造不出来的,只有本服务器拥有。
这是为了防止别人假冒。
有了个全世界人民除了本服务看得懂的id,服务器就可以有一个map,对应的id可以存在客户无数多特有的信息。

这其实本质和cookie一样,只是说原先有客户端放具体内容,变成了客户端放一个指针,
以上内容是本人是这么理解的,如果有错误请不吝指出

现在可以解决问题了,

首先,用户访问我们的系统的时候,我们先查看他卡包中有没有我们的会员卡,如果有,就让他直接通过了,如果没有,那么就需要验证用户,
用户验证通过之后马上给他办张会员卡,那么他在第二次访问的时候我们就知道他可以直接通过了,我们就不需要验证了。
蛤蛤 问题解决了,是不是感觉too young too simple~