会话技术一看就会。。

Http无状态

Http是无状态协议,是指协议对于交互性场景没有记忆能力。

举个例:

无状态:

魔都的老王开了一个会所,一个开会的地方,有大会议室、小会议室、Cosplay情景会议室。

顾客听说这个会所有特色,于是纷纷前来消费,小明就是其中的一员。小明上次会议室体验很棒,尽管有点贵,本周又前来消费。

结账时,小明以为老王认识自己,和老王套近乎弄个优惠价:“王老板,我上周刚来过,打个折扣呗”!

老王很茫然地瞅着小明:“上周你来过?我好像一点印象也没有了嘛,很抱歉,无法优惠”!

小明很不爽地付完钱走人…

有状态:

老王有一个助手叫小王,看到这一幕于是和老板有一番对话:

小王:老板,下次客人来消费,咱们给客人发一张小卡片,来一次打卡一次,凡是打过卡的,都有优惠。来的次数越多,折扣力度越大,这样就能有更多的回头客,您看如何?

老王连说这是好主意,以后就这么干!

小明第一次来领了一张考勤卡,打了卡夹在钱包里。

第二次来消费埋单时,小明从自己的钱包掏出考勤卡,老王一看原来是回头客,好说好说,88折优惠,小明和老王都笑的合不拢嘴…

HTTP本身是一个无状态的[连接协议],为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是会话技术(Cookie,Session)了。

由于HTTP是一种无状态的协议,服务器单纯从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie

客户姓名小明
消费次数50
会议室类型***
服务员类型***

后来老王觉得考勤卡上,还应该多记录一些内容,才能更好地服务客户,考勤卡上慢慢增加了更多内容:

会员卡片样例:

小明再次来消费时,不仅可以优惠,还可以根据小明的消费习惯,做出最合理的安排。随着服务的精细化,小卡片上描述客户的信息越来越多,卡片越做越大,由于小卡片受4K字节的限制,,每次客户前来消费都要携带大大的卡片,这很夸张!

Session Cookie

小王寻思着,小卡片一直都是客户携带,为何不在公司的电脑上弄个数据库,记录客户的消费习惯,每个客户有一个数据库明细:

客户代号08029snne3e0kekll0jeis007
客户姓名小明
消费次数50
会议室类型***
服务员类型肤白貌美
更多内容

给小明的小卡片上只要有一个客户代号“08029snne3e0kekll0jeis007”就可以了,查询电脑就可以知道是小明,消费完还可以从账户余额内扣除。

这个客户代号就是SessionID,通常保存在客户端浏览器的Cookie里,故称之为 Session Cookie。

上文故事中的**“Stateless”、“Stateful”、“Cookie”、“Session ID”以及“Session Cookie”**与http协议中这些关键词具有相类似的意思。

http最初的设计是无状态的(stateless),但是无状态的http无法满足互联网日益发展的需求,于是业界扩展了http协议,增加了有状态(stateful)协议头,使之变成一个有状态协议。

这个有状态的协议头,就是依靠Cookie来实现的,Cookie是维系客户端与服务器之间状态同步的纽带。

所谓状态同步,通俗地说就是“记忆同步”!

会话技术(Cookie,Session)

会话技术:
​ 会话:浏览器访问服务器端,发送多次请求,接受多次响应。直到有一方断开连接。会话结束。

功能:可以使用会话技术,在一次会话的多次请求之间共享数据。
分类:

  • ​ 客户端会话技术 Cookie
  • ​ 服务器端会话技术 Session

Cookie:

1. 概念:客户端会话技术,将数据保存到客户端

2. 快速入门:

   ```java
   //1. 创建Cookie对象,绑定数据
    * new Cookie(String name, String value)
   //2. 发送Cookie对象
    * response.addCookie(Cookie cookie)
   //3. 获取Cookie,拿到数据
    * Cookie[]  request.getCookies()  
   ```

3. 实现原理

       * 基于响应头set-cookie和请求头cookie实现
  1. cookie的细节

    • 一次可以发送多个cookie

    • 默认情况下,当浏览器关闭后,Cookie数据被销毁

    • 持久化存储:

     * setMaxAge(int seconds)
    1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
    2. 负数:默认值
    3. 零:删除cookie信息
    
    • cookie共享问题
    	setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
    * 如果要共享,则可以将path设置为"/"
    
     setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
     
     setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
                
    
  2. Cookie的特点和作用

    ​ cookie存储数据在客户端浏览器

    ​ 浏览器对于单个cookie的大小有限制(4kb)以及 对用一个域名下的总cookie数量也有限制(20个)

Session:

  1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
  2. 快速入门:
//1. 获取HttpSession对象:
HttpSession session = request.getSession();
//2. 使用HttpSession对象:
Object getAttribute(String name)  
void setAttribute(String name, Object value)
void removeAttribute(String name)  
  1. 原理

    • Session的实现是依赖于Cookie的
  2. 细节

    • session在服务器关闭是被销毁

    • session默认失效时间是30分钟

选择性配置修改    
<session-config>
	<session-timeout>30</session-timeout>
</session-config>
  1. 特点
    • session用于存储一次会话的多次请求的数据,存在服务器端
    • session可以存储任意类型,任意大小的数据

session与Cookie的区别:

  1. session存储数据在服务器端,Cookie在客户端
  2. session没有数据大小限制,Cookie有
  3. session数据安全,Cookie相对于不安全
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值