Java的会话技术Cookie和Session

目录

  • 一.什么是会话技术?
  • 二.什么是Cookie?
    • 1 使用步骤
    • 2.Cookie的细节
    • 3.Cookie的特点和作用
  • 三.什么是Session?
    • 1.概念
    • 2.Session的基本使用
    • 3.服务器如何确保在一次会话中多次获取的Session一致性?
    • 4.Session的细节
    • 5.session的特点
  • 四.Session和Cookie的区别
    • 1.存放位置
    • 2.数据大小
    • 3.安全性

一.什么是会话技术?

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。所以就有了客户端的会话技术cookie,和服务端的会话技术Session,在一次会话的范围内,共享数据。

二.什么是Cookie?

Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
所以Cookie是由服务器生成,在服务器的响应头中,客户端在请求头以此作为凭证作为一次会话的状态或者标记。

1 使用步骤

1).创建Cookie,绑定数据

		Cookie cookie=new Cookie(name, value);

2).发送Cookie对象

		response.addCookie(cookie);

3).获取Cookie

	 request.getCookies();

2.Cookie的细节

1)一性是否可以发送多个Cookie?
答案当然是可以的。

2)Cookie的存活时间?
a.默认情况下,当浏览器关闭后,内存被释放了,Cookie数据即被销毁,
b.通过setMaxAge(in seconds),持久化到本地,当参数大于0,则将数据写到硬盘上,参数默认是负数,也就是上面的情况,当参数等于0时,则是删除Cookie信息

3)Cookie能不能用中文?
tomcat8之前是不能直接存放中文数据的,需要通过URL编解码才能传输

4)Cookie的共享问题。
a.同一个服务器的不同项目,默认情况下,各项目间不能共享,如果设置共享通过setPath("/")来共享同一个服务器的所有项目。
b.不同的服务器同Cookie的共享问题,可以同过setDomain(String path),如果设置一级域名相同,那么多个服务器之间的cookie可以共享,比如setDomain(“baidu.com”),这样tieba.baidu.com和news.baidu.com可以共享。

3.Cookie的特点和作用

特点:
1)cookie存储在客户端浏览器
2)浏览器对于单个Cookie的大小是有限制(4kb)一级同一个域名下的总cookie数量也有限制(20个)

作用:
1)一般用于存储少量不太敏感数据
2)在不登录的情况下,完成服务器对客户端做身份做识别

三.什么是Session?

1.概念

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

2.Session的基本使用

1)获取Session对象

	HttpSession session = request.getSession();
	session.getAttribute("msg");

2)使用Session对象

	session.setAttribute("msg", "ts");
	session.removeAttribute("msg");

3.服务器如何确保在一次会话中多次获取的Session一致性?

session是依赖于cookie的,在第一次会话开启的时候,是没有session的,会在内存中创建一个session,在响应时会将创建的session的sessionId,放在cookie的头,在下一次访问时,将ssionid带过来,在去内存中去找Session,所以才能保证唯一性。

4.Session的细节

1)客户端关闭后,服务器不关,两次获取的Session是否为一个?
默认情况下,是不一个,因为一次会话已经结束了,如果希望一致的话,则通过Cookie设置JSESSIONID将id设置下去,这样就可以为一个了Cookie c=new Cookie(“JSESSIONID”,session.getId()),c.setMaxAge();

2)客户端不关,服务器关闭,两次获取的Session是否为一个?
默认情况下不是一个,但是要确保数据不丢失
session的持久化?session的反序列化?这些操作Tomcat服务器帮我们已经做过了。正常关闭后会在work中生成一个Session.zip,重启后会重新反序列化,并删除数据

3)Session的失效时间
session.invalidate();会将session删除,默认时间是30分钟,也可以在web.xml中添加session-config中配置

5.session的特点

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

2)session可以是任意类型,任意大小的数据

四.Session和Cookie的区别

1.存放位置

Session是服务端,Cookie是在客户端

2.数据大小

Cookie有大小限制,Session没有

3.安全性

Session相对于Cookie安全,毕竟存在于服务器中。

你可能感兴趣的:(学习札记)