深入理解cookie 和session

对于后台开发者来说,cookie和session都是最基础的知识,通常我们说起cookie和session,最经常提到的就是,cookie是保存在客户端而session是保存在服务器端,今天我们就详细了解一下cookie和session,看看他们到底是怎么产生和工作的

cookie机制

当你在浏览器请求一个页面时,如果你本地硬盘中没有对应的cookie记录,这时候服务器在相应的时候,在HTTP响应头中添加一行特殊的字符,让客户端按照相应的指示,生成相应的cookie,那客户端是如何让使用cookie的呢,首先浏览器检查硬盘中的所有cookie,若某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

有的同学可能不太明白怎么确定怎么看cookie的作用范围呢,接下来我们就介绍一下

我们只知道cookie存在我们的本地上,但是却不知道他存储了哪些信息

cookie的内容:名字,值,过期时间,路径和域;其中路径和域就决定了此条cookie的作用范围;过期时间大家应该不陌生了,若在生成cookie的时候,不设置cookie,就称此cookie为会话cookie,即在当前会话中起作用,浏览器关闭或者会话关闭时cookie失效,一般会话cookie都是储存在内存中,不会忘硬盘中存储,而设定了过期时间切未到达过期时间的cookie储存在硬盘中,知道cookie过期,这样的好处就是,每次使用,只需要到指定的文件中进行查找,并且不同浏览器进程间是可以共享cookie的,

正统的cookie分发是通过扩展HTTP协议来实现的,而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。

session机制

session机制是一种保存在服务器端的机制,服务器端用一种类似于散列表的结构储存这些session,每当用户创建一次session时,首先服务器会先检查该HTTP请求中是否携带了session的标记字段(即 session_id),如果有,则会在散列表中查找该session_id所对应的session信息,如果检索失败(没有找到),服务器会创建一个新的session;如果没有携带,服务器也会创建一个session,并储存在散列表中,并在本次相应中将产生的session_id返回给客户端进行保存,以便下次使用。

保存seesion_id的方式可以采用cookie,这样在浏览器交互的过程中,客户端就可以按照规则将它发送给服务器端。一般储存在cookie中的名字就是SESSIOMID这样的字段,大家可以到文件中看一看

这里就有一个问题了,cookie机制是可以在浏览器中被人为禁止的,那不能因为cookie的禁止session就无法使用吧,所以除了cookie还有两种传递session_id给服务器的方式

URL重写

这是比较常用的一种方式,就是把session id直接附加在URL路径的后面。

表单隐藏字段

就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
比如:

<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid"
value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form> 

实际上这可以用对action的url的重写来代替

session和cookie的区别

说到这里,大家应该都对session机制和cookie机制有了认识吧,那么再让我们明确一下他们两的区别

1,cookie是保存在客户端的,session是保存在服务器端的

2,cookie是比较不安全的,因为他储存在磁盘文件中,别人可以通过解析文件,篡改cookie,所以一些私密信息应该采用session

3,session储存在服务器端的,当session数据过大时,无疑不是一件好事,会使服务器的性能降低,也会增加搜索负担,如若考虑增加服务器性能,应该使用cookie

总结

对于隐私的内容,如注册登录账号密码邮箱这些隐私应该使用session储存,对于一些其他的不会危害自己的信息就用cookie

猜你喜欢

转载自blog.csdn.net/LYue123/article/details/88366085
今日推荐