Session
Session是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过相应发送到浏览器。当浏览器第二次发送请求时,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session
一般情况下,服务器会在一定时间内(默认为30分钟)保存这个Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间限制,坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。
Cookie
Cookie中文译文是饼干的意思,cookie是保存会话数据的一种技术,其容量有限;有生命周期,根据需求设置cookie的有效期,如果不进行设置的话,数据保存至浏览器关闭。它保存在浏览器的缓存中,数据是明文显示的通常只保存非敏感信息,未加密的数据会充分暴露给外界。Cookie通常是保存用户偏好设置、用户名、日期时间等数据
Cookie从何而来?
- 浏览器向服务器发送请求
- 服务器接收请求,生成一个cookie对象保存“标识”数据
- 然后把cookie对象放在响应头,一并发回浏览器
- 浏览器取出cookie对象的数据保存在浏览器的缓冲中
- 再次访问时请求头携带cookie数据发送到服务器
- 服务器根据cookie的数据做出相应的处理
注意:cookie的声明周期可以通过cookie.setMaxAge()
方法设置的
Cookie的应用场景
- 判断用户是否登录过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须重新填写登录信息
- 另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入Cookie,在最后付款时从cookie中提取这些信息。这里会遇到安全和性能的问题需要我们进一步去处理。
Session与Cookie区别与联系
Cookie是属于Session对象的一种。但有不同,Cookie不会占用服务器资源,是存在客户端内存挥着一个cookie的文本文件中;而“session”则会占用服务器资源。我们一般认为cookie是不可靠的,session是可靠的,但是目前很多著名的站点都是依赖cookie。有时候为了解决禁用cookie后的页面处理,通常采用url重写技术,调用session中大量有用的方法从session中获取数据后置入页面。
- Session存在与服务端对客户不可见,而Cookie存在客户端。SessionId要依赖cookie进行转发。
- 当第一次打开浏览器时,浏览器马上分配了一个sessionid给客户端,客户端发送请求给服务端时,服务端记录此sessionid在本地
- 当客户端再次请求服务端时,它就是根据先前有效的sessionid做出相应的操作。每次客户端发来请求时,服务端根据cookie携带的sessionid来区分是哪个用户的会话。
Session实例
- com.session包中的两个类:User类是用户信息类,ServletSession类是处理业务逻辑类
- WebContent包下有两个页面:
index.jsp
页面和login.jsp
页面
User类
ServletSession类
login.jsp页面
index.jsp页面
写完上面的类后,部署程序,打开浏览器,输入http://localhost:8080/Servlet/index.jsp
表单未提交前,可见sessionId=【86E619570D3CDBE178DD087BB0A0E8BC】
表单提交成功后,跳转到index.jsp页面,页面的URL自动变为:http://localhost:8080/Servlet/ServletSession
Cookie实例
web.xml配置文件
参考并感谢
[1] https://blog.csdn.net/weixin_36146275/article/details/55673211
[2] https://blog.csdn.net/duan1078774504/article/details/51912868