Java基础强化(四)--Cookie与Session

Java基础强化(四)–Cookie与Session

一、会话技术

1.概念

​ 会话是指浏览器与服务器之间的信息交互。

​ 会话从浏览器第一次给服务器资源发送请求开始,知道有一方断开结束。一次会话包括多次请求与响应。

2.功能:

​ 在一次会话的范围内,共享数据

3.方式:

​ 1)客户端会话技术:Cookie

​ 2)服务器端会话技术:Session

二、Cookie

1.概念

​ 客户端会话技术,将数据保存到客户端

2.快速入门

​ 在Demo1中创建并发送cookie

//创建cookie对象,调用new Cookie(String name,String value)
Cookie cookie = new Cookie(name,"张三");
//发送cookie对象,调用response.addCookie(Cookie cookie)
response.addCookie(cookie);

​ 在Demo2中获取Cookie

//获取cookie,调用 Cookie[] request.getCookies()
Cookie[] cookies = request.getCookies()

3.Cookie实现原理

​ 基于响应头set-cookie和请求头cookie实现

4.cookie的细节

​ 1)可以一次创建多个cookie,使用response调用多次addCookie方法发送cookie即可

​ 2)生命周期:

默认情况下,关闭浏览器之后,cookie数据被销毁

持久化存储:

​ setMaxAge(int seconds)

​ a.seconds为正数:将Cookie数据写到硬盘文件中,即持久化存储。数值越大,存活时间越长

​ b.seconds为负数:默认值,存在内存中,关闭浏览器,即销毁

​ c.seconds为零:删除Cookie信息

​ 3)在Tomcat 8之前,Cookie中不能直接存储中文数据。

​ --需要将中文数据转码(一般采用url)

​ 在8之后,Cookie支持中文数据

​ 4)共享问题

​ 在同一个Tomcat服务器中,部署多个web项目,默认情况下各个项目的Cookie是不能被其他项目共享的

​ 如果需要共享,那么可以通过调用setPath(String path)方法来改变Cookie的获取范围,将其设置为"/",即服务器根目录

​ 写法示例:

//创建Cookie对象
Cookie c1 = new Cookie("msg","你好");
//设置Path,令当前服务器下部署的所有项目共享Cookie信息
c1.setPath("\")

​ 在不同Tomcat服务器下部署的服务器若要实现共享,则需要调用setDomain(String Path)方法

​ 只要不同服务器之间的一级域名相同,则将path设置为以及域名,这些web项目即可共享kookie

​ 示例:

//创建Cookie对象
Cookie c1 = new Cookie("msg","你好");
//设置domain,令tieba.baidu.com与new.baidu.com中cookie可以共享
c1.setDomain(".baidu.com")

5.Cookie特点

​ 1)Cookie数据存储在客户端浏览器,安全性不强

​ 2)浏览器对单个Cookie大小有限制,并对同一个域名下的总Cookie数也有限制(一般20)

6.Cookie作用

​ 1)Cookie一般用在存储少量不太敏感的数据

​ 2)在不登陆的情况下,完成服务器对客户端的身份识别

三、Session

1.概念:

​ 服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象

2.快速入门

​ 1)获取HttpSession对象:

​ HttpSession session = request.getSeesion();

​ 2) 使用HttpSession对象:

​ Object getAttribute(String name);

​ void setAttribute(String name,Object value);

​ void removeAttribute(String name);

3.原理

​ Session是依赖于Cookie的

第一次获取Session时,没有Cookie,会在内存中创建一个新的Session对象。并在Cookie中保存该session的地址。

在第二次获取Session时,Cookie会被客户端浏览器发送到服务器端,服务器端会去根据Cookie中的Session地址查找Session对象。

4.细节

​ 1)在第一次访问结束后,关闭客户端,不关闭服务器。再重新打开客户端,访问服务器。那么,两次访问的session是否为同一个?

  • 默认情况下,不是
  • 如果要求为同一个,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存
Cookie c - new Cookie ("JSESSIONID",session.getId());
c.setMaxAge(60 * 60);
response.addCookie(c);

​ 2)在第一次访问结束后,关闭服务器,不关闭客户端。再重新打开服务器,并让客户端访问服务器。那么,两次访问的session是否为同一个?

  • 不是同一个,但是我们要确保数据不丢失
  • session的钝化:
    • 再服务器正常关闭之前,将session对象系列化到硬盘上
  • session的活化:
    • 再服务器启动之后,将session文件转化为内存中的session对象即可

session的活化与钝化,本地Tomcat服务器会自动帮我们完成。

但是如果使用IDEA工具,钝化的操作可以正常执行,活化的工作无法正常执行。

但是我们也不用担心这个问题,因为未来我们不可能在IDEA本地进行部署。

3.Session的销毁

​ 1)服务器被关闭时,session失效

​ 2)session的自杀方法:invalidate()

​ 3)session默认失效时间:30分钟(可在web.xml中配置)

4.Session的特点

​ 1)用于存储一次会话的多次请求的数据,存在服务器端

​ 2)Session可以存任意类型,任意大小的数据

​ 3)Session数据安全,Cookie相对不安全

发布了14 篇原创文章 · 获赞 0 · 访问量 135

猜你喜欢

转载自blog.csdn.net/weixin_44580146/article/details/104449526