cookie和session详解

为什么会有cookie?

        因为http是一种无状态协议,也就是说每次连接之后就不会记住上一次连接。而Cookie就像是服务器给每个来访问的用户贴的标签,而这些标签就是对来访问的客户端的独有的身份的一个标识,这里就如同每个人的身份证一样,带着你的个人信息。而所以Cookie是存在客户端的,这里其实就是在你的浏览器中。每个cookie的大小为最多4K

无状态的原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象。

cookie是用来做什么的?

        cookie机制采用的是在客户端保持状态。当一个客户端第一次连接过来的时候,服务端就会给他打一个标签,这里就如同给你发了一个身份证,当你下次带着这个身份证来的时候,服务器就知道你是谁了。

        实现状态保持主要有两种方式:

            1.在客户端存储信息使用Cookie        2.在服务器端存储信息使用Session

cookie的种类:

        会话Cookie:不设置过期时间,保存在浏览器的内存中,关闭浏览器,Cookie便被销毁

        普通Cookie:设置了过期时间,保存在硬盘上

Cookie的主要内容包括:

        名字,值,过期时间,路径和域

        cookie是不能进行跨域的


什么是session?

称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。

客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。

Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

session是用来做什么的?

通过服务器来保持状态的。

session的原理:

基本原理是服务端为每一个session维护一份会话信息数据,而客户端和服务端依靠一个全局唯一的标识来访问会话信息数据。用户访问web应用时,服务端程序决定何时创建session。

创建session的步骤:

  1. 生成全局唯一标识符(sessionid);
  2. 开辟数据存储空间。一般会在内存中创建相应的数据结构,但这种情况下,系统一旦掉电,所有的会话数据就会丢失,如果是电子商务网站,这种事故会造成严重的后果。不过也可以写到文件里甚至存储在数据库中,这样虽然会增加I/O开销,但session可以实现某种程度的持久化,而且更有利于session的共享;
  3. 将session的全局唯一标示符发送给客户端。

cookie和session的区别:

cookie保存在客户端浏览器中,而Session保存在服务器上。

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

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

为什么session可以状态保持还需要cookie?

虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

cookie和session是否可以同时使用?

Session是服务端支持  cookie是客户端支持    一般情况下两个都能使用的 除非你禁用
Session使用就跟一般的数组变量赋值读取差不多($_SESSION[xxx])  前提是Session开启

cookie的读取就跟一般的数组变量一样($_COOKIE[xxx]) 设置使用setcookie函数

session和cookie使http变为有状态的

基于session认证的缺点:

1.session是存储在服务器端的内存,每次经过一次认证之后,都要在服务端做一次记录,以方便用户下次请求的鉴别,如果认证永辉增加,服务器的开销会很大。

2.用户认证以后,服务端做认证记录,下次请求必须要在这台这台服务器上请求,才能拿到授权资源,这样在分布式的应用中,相应的限制了负载均衡器的能力,也就限制了应用的扩展能力。

3.CSRF因为基于cookie来进行用户识别的,cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值