COOKIE和Session的原理及异同
COOKIE和Session的原理及异同
1. cookie的创建和读取
cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去,这样,web资源处理的就是用户各自的数据。
服务器在客户端保存用户的信息,比如,登录名,密码等,数据量不大,服务器在需要的时候可以从客户端读取,保存在客户端的浏览器缓存目录下。换一台电脑的浏览器就不能读到了,但如果不同浏览器的cookie文件存放目录是一样的话,使用同一个电脑的不同浏览器仍然可以读到,因为此时浏览器间的cookie是共享的。
1.1 创建cookie
用户使用浏览器访问一个服务器,服务器端就可以创建一个cookie,并且设置它的生命周期,通过response将cookie返回给浏览器。
浏览器会在本地产生临时文件,这个文件中存放的就是cookie内容,使用的是明文(可以加密后保存),所以比较危险,这个临时文件是有存在时间限制。如果cookie重名的话,就会替换掉以前的值。一个站点可以创建多个cookie。
创建cookie:
![](http://upload-images.jianshu.io/upload_images/5355764-1c568d1d57136186.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/502/format/webp)
1.2 读取cookie
浏览器向某个服务器发送请求的时候,会携带跟这个服务器相关的cookie信息,存在request中,所以服务器可以通过解析request中的内容来获取cookie信息。由于不能通过键值对的键来直接读取,读出来的cookie是个数组,先读取所有信息,再选出需要的信息。
读取cookie:
![](http://upload-images.jianshu.io/upload_images/5355764-e137960778463133.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/635/format/webp)
1.3 cookie的作用
- 保存上次登录时间等信息
- 保存用户名、密码,在一定时间内不用重新登录
- 记录用户访问网站的喜好(比如有误背景音乐,网页的背景色等)
- 网站的个性化,比如定制网站的服务,内容等
2.session原理:
1、session是保存在服务器端,理论上是没有是没有限制,只要你的内存够大创建一个Cookie对象key为JSSIONID,value为ID的值,将这个Cookie写回浏览器
那么会重新创建一个新的session再返回一个新的JSESSIONID通过Cookie返回到浏览器
如:你在tomcat上同时部署了两个web项目,分别是web1、web2。当你在一个浏览器上同时访问web1时创建的session是A1,访问web2时创建的session是A2。
后面你再多次访问web1使用的session还是A1,多次访问web2时使用session就是A2
因为Cookie在关闭浏览器后就会消失,但是原来服务器的Session还在,只有等到了销毁的时间会自动销毁
那可以强制让你用户开启接收Cookie后再让其访问即可。
当你第二次访问的时候浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间已经销毁又重新返回开辟一块新的空间返回新的钥匙到浏览器。
3.cookie 和session 的区别:
1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端
2、Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。Session是没有大小限制和服务器的内存大小有关。
4.cookie 和session 的联系:
session是通过cookie来工作的
session和cookie之间是通过$_COOKIE['PHPSESSID']来联系的,通过$_COOKIE['PHPSESSID']可以知道session的id,从而获取到其他的信息。
个5.人理解
关于同一个浏览器访问一个网站,前后登录两个人的账号,会发现,用的是一个session容器,不过sessionid这个属性会被覆盖,所以一个浏览器同一段时间只会存在一个的账号,不可能并行进行两个人的账号。而如果采用不同的浏览器登录两个人账号,那么将各自分配一个sessionid,前者一个浏览器登两个账号可理解成前一个账号的sessionid就被杀死了,或者说值被覆盖了。每个账号在登录网站时,会分配sessionid,与userid会相对应,并且保存到服务器的数据库中,接下来每个sessionid在访问服务器的时候,就会去查找相应的表,显示相对应的用户信息。
所以cookie和session最大的区别是,客户端技术和服务器端技术,数据存放的位置不一样,技术原理不同,可实现的功能侧重点也不同。