java会话机制_java 浅谈web系统当中的cookie和session会话机制

一 Cookie:

1. Cookie翻译为小甜饼,有一种特殊的味道。cookie主要用来在(浏览器)客户端做记号用的。Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部分,也就是说PHP开发都会涉及到Cookie.

2. Cookie在web开发中的作用是什么呢?存储在什么地方,使用Cookie实现的经典案例有哪些?

* web开发中的作用是:将回话的状态保存在浏览器客户端上。(原因:HTTP协议是无状态无连接的,必须有一种机制来保持会话的正常进行)

* Cookie最终都是存储在浏览器客户端上的。

* Cookie的经典案例:

购物车

十天内免登陆

3.  Java Servlet中对Cookie是怎样支持的?

在Servlet规范当中,提供了一个类javax.servlet.http.Cookie. Cookie中的name和value都是String类型。

4,.Cookie所需掌握的基本内容。

如何在后台服务器端创建出Cookie,然后发送给浏览器客户端。

Cookie cookie=new Cookie("name","valiue");

response.addCookie(cookie);

浏览器发送Cookie给服务器后,服务器如何获取Cookie呢?

Cookie[ ] cookies=request.getCookies();

if(cookie!=null){

for(Cookie cookie:cookies){

cookie.getName();

cookie.getValue();

}

}

服务器端还可以设置保存Cookie的路径,默认绑定当前路径。设置Cookie在浏览器端的有限期,默认保存在浏览器内存中。具体方法详见源码。

session:

在web系统中,有一种机制,叫做会话。英语单词为session。session对象主要是将会话状态保留在服务器端。而cookie是将会话状态保留在浏览器端。

会话:例如我们打开某购物网站,则表示开启了一次会话,我们可能会发送多次请求,但都属于同一个会话,session同样是B/S架构的一部分,同样属于HTTP协议的一部分。java对于session的支持。java的servlet规范给定了一个接口 javax,servlet.http.HttpSession 该接口创建的对象就是session。一个session对象的创建到销毁是一次完整的会话。一个会话包含多次请求。 request

session机制实现原理:

当用户打开浏览器第一次访问web站点时,服务器端就会创建一个新的session对象,同时给该session对象分配一个sessionId ,sessionId和session对象会绑定带session列表中,服务器端会将sessionId以cookie的形式发送给浏览器客户端。

只要浏览器不关闭,sessionId这个cookie就会一直存在,下一次浏览器客户端发起请求会携带着sessionId给服务器,服务器会拿着sessionId到session列表查找对应sessionId的session对象。

本质上session机制的实现完全依赖于sesionId

session机制当中有一个超时机制。浏览器和服务器之间的协议时HTTP协议,属于无连接无状态的,浏览器关闭这个动作,服务器是完全无法感知的,所以服务器只有依赖于超时机制去销毁ssession对象那个。CATALINA_HOME/conf/web.xml可以配置超时时间。默认为30分钟.

浏览器不关闭也可能会话结束,  session超时

浏览器关闭会话可能没结束。  服务器端session没有销毁

假设浏览器禁用Cookie,如何拿到session呢?

第一种:提示用户开启cookie

第二种;URL重写。(不推荐,效率低)

session机制的经典案例:

用户登陆成功,session中存储用户信息,用于以后判断用户是否登陆。未登录跳转到登陆页面。

电商平台: 购物车信息存储到session中,session超时钝化到数据库当中,下次用户登陆再次结账。

request.getSession();可传参数 true 获取不到则新建   false获取不到返回null,不新建。

HttpSession接口方法

getAttribute(String key);//从session获取数据

setAttribute(String name,String value); //向session存储数据

removeAttribute(String name)//移除指定数据

invalidate() //销毁session对象

452829c562ddb771822ba635356f9310.png

初次感悟,若有不足,欢迎补充。


版权声明:本文为weixin_30696571原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。