Cookie V.S. Session

Cookie

Cookie概述

  1. 什么是Cookie
          在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个 键值对构成的,随着服务器端的响应发送给客户端浏览器。 然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了。
  2. 浏览器查看Cookie

        各浏览器查看Cookie的方式不同,以Firefox为例,“选项”->"隐私“->"移除单个Cookie"

  3. Cookie规范

    • Cookie大小上限为4KB;
    •  一个服务器最多在客户端浏览器上保存20个Cookie;
    •  一个浏览器最多保存300个Cookie;

  4. Cookie与HTTP头

     Cookie是通过HTTP请求和响应头在客户端和服务器端传递的:

    l  Cookie:请求头,客户端发送给服务器端;

    Ø  格式:Cookie: a=A; b=B; c=C。即多个Cookie用分号离开;

    l  Set-Cookie:响应头,服务器端发送给客户端;

    Ø  一个Cookie对象一个Set-Cookie:

    Set-Cookie: a=A  Cookie ck=new Cookie(”a","A");

    Set-Cookie: b=B  Cookie ck=new Cookie(”b","B");

     如果服务器端发送重复的Cookie那么会覆盖原有的Cookie

Cookie生命周期

  1. 所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。

    •  cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
    • cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;
    • cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

Cookie的Path

      通过设置Cookie的path来指定浏览器,在访问什么样的路径时,包含什么样的Cookie。

下面我们来看看Cookie路径的作用:

下面是客户端浏览器保存的3个Cookie的路径:

a: /cookietest;

b: /cookietest/servlet;

c: /cookietest/jsp;

下面是浏览器请求的URL:

A: http://localhost:8080/cookietest/AServlet;

B: http://localhost:8080/cookietest/servlet/BServlet;

C: http://localhost:8080/cookietest/jsp/CServlet;


²  请求A时,会在请求中包含a;

²  请求B时,会在请求中包含a、b;

²  请求C时,会在请求中包含a、c;

 

也就是说,请求路径如果包含了Cookie路径,那么会在请求中包含这个Cookie,否则不会请求中不会包含这个Cookie。

²  A请求的URL包含了“/cookietest”,所以会在请求中包含路径为“/cookietest”的Cookie;

²  B请求的URL包含了“/cookietest”,以及“/cookietest/servlet”,所以请求中包含路径为“/cookietest”和“/cookietest/servlet”两个Cookie;

²  B请求的URL包含了“/cookietest”,以及“/cookietest/jsp”,所以请求中包含路径为“/cookietest”和“/cookietest/jsp”两个Cookie;

设置Cookie的路径需要使用setPath()方法,cookie.setPath(“/cookietest/servlet”);


HTTPSession

HTTPSession概述

    1.  什么是HttpSesssion
        javax.servlet.http.HttpSession接口表示一个会话,我们可以把一个会话内需要共享的数据保存到HttSession对象中!会话:一个用户对服务器的多次连贯性请求!所谓连贯性请求,就是该用户多次请求中间没有关闭浏览器!会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!
        HttpSession是JavaWeb提供的,保存在服务器端!Servlet三大域对象之一(request(请求,一个请求对应一个request)、session(会话,锁定一个用户)、application(ServletContext)(应用))
    2.  获取HttpSession对象
        HttpSession request.getSesssion():如果当前会话已经有了session对象那么直接返回,如果当前会话还不存在会话,那么创建session并返回;
         HttpSession request.getSession(boolean):当参数为true时,与requeset.getSession()相同。如果参数为false,那么如果当前会话中存在session则返回,不存在返回null;

    3.  常见的session的域方法:
        void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性。
        Object getAttribute(String name):用来获取session中的数据,当前在获取之前需要先去存储才行,例如:String value = (String) session.getAttribute(“xxx”);,获取名为xxx的域属性;
        void removeAttribute(String name):用来移除HttpSession中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;
        Enumeration getAttributeNames():获取所有域属性的名称;

    4.  session的实现原理
        session底层是依赖Cookie的!当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。
        当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。
        如果关闭浏览器,丢sessionId, session对象仍然保存在浏览器,但由于缺少sessionId, 该对象找不到了,session对象的最大复活时间30分钟,超过经久不用的session对象被丢弃。
        JSP中可以直接访问session,但是java中必须要request.getSession()才能创建Session.

        JSP:

    <h3><%session.getAttribute("username") %></h3>

        Java

    HttpSession session=request.getSession();
    session.setAttribute("username", username);

       sessionId:32bit, 16进制,使用UUID生成的不重复的id.可以通过getId()方法获取到SessionID。

     

     public class UUIDTest {
	@Test
	public void fun1(){
		UUID uuid=UUID.randomUUID();
		System.out.println(uuid);
		String str=uuid.toString();
		str=str.replace("-", "");
		str=str.toUpperCase();
		System.out.println(str);
	  }
     }
       输出结果为:d5ecb898-eb9b-40ff-84f5-131c33273ad9
                              D5ECB898EB9B40FF84F5131C33273AD9


      




 


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值