http无状态链接之我是如何认出你?

众所周知,http的链接是无状态的。浏览器

HTTP无状态协议是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。tomcat

通俗一点讲就是你每次请求服务器的时候,它并不知道你是谁,但实际上如今的网站并非这样的,由于它们使用了cookie和session来辅助服务器记住你是谁,简单来说这二者就是你进入这个网站的钥匙。关于cookie和session的具体内容和差异,能够去找度娘聊聊。服务器

可能有的同窗会有疑问,我在作网站开发的时候并无设置cookie啊,那是怎么识别用户的呢?cookie

其实在你首次登录某个网站的,没有任何cookie的时候(首次登录或者清除),服务器会给你返回一个自生成的id(tomcat默认的叫JSESSIONID,百度的叫BAIDUID,简书的叫_session_id,固然每一个均可能不同,这个是能够自定义的)cookie值写入你的浏览器。那这个sessionid(如下都会这么叫)就是你进入网站的钥匙(ps:若是你的浏览器禁止或未启用cookie功能,那么这个值就会以 http://url;jsessionid=9A8E07911E199FB356720FA4D2F76162这种形式传递)。当你登录的时候,请求会携带这个cookie值传入后台。session

只携带自生成cookie

通常登录后台的处理就是若是用户登录成功,那么就将用户id或者。。。保存至session中,那这样就生成了一条识别链。 简易识别链网站

大概的解释一下:当程序须要为某个客户端的请求建立一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识----称为sessionid,若是已包含则说明之前已经为此客户端建立过session,服务器就按照sessionid把这个session检索出来使用(检索不到,会新建一个),若是客户端请求不包含sessionid,则为此客户端建立一个session而且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。以后的每次访问都会携带上这个sessionid,而后查找对应的session和session中的值,服务器进行登录判断和权限判断。url

关闭浏览器、长时间没有请求服务器、注销登录,这个时候服务器会把该sessionid从内存中清除掉,这个时候若是咱们再去请求服务器,sessionid已经不存在了,因此服务器并无在内存中找到对应的 sessionid,因此会再产生一个新的sessionid,这个时候通常咱们又要再登陆一次。 code

细心的同窗会发现,那么是否是意味着,若是我拿到了你这个sessionid我就能够冒充你来访问这个网站了?没有错,若是网站没有很好的防御,确实能够这么作。具体怎么实现我这就不太方便说了,感兴趣也能够度娘cookie窃取欺骗和攻击。事务

因此请各位同窗保护好本身的cookie,不要轻易被偷窃走哦。内存

补充一点:文中的sessionid是服务器端用来识别客户端,也就是知道是哪一个客户端发来的数据,响应给哪一个客户端。而咱们关注这个客户端是哪一个用户在使用,因此须要在服务器端生成标识哪一个用户的session,以便作相应处理。

转载请标明出处

相关文章
相关标签/搜索