java session会话_JAVA基础之会话技术-Cookie及Session

本文深入探讨了Servlet中的会话技术,包括Cookie和Session的使用。讲解了Cookie的创建、设置持久化时间、携带路径以及删除,并展示了如何在服务器端接收Cookie。同时,详细阐述了Session的生命周期、获取Session对象的方法以及如何在Session中存储和读取数据。内容还涉及了Session依赖Cookie来存储客户端的唯一标识JSESSIONID。
摘要由CSDN通过智能技术生成

至此,学习Servlet三个域对象:ServletContext(web项目)、request(一次请求)、Session(一个客户端)!均有相同的方法!

从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束。在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值。数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁!

一、会话技术简介:

1、存储客户端的状态:

因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。

会话技术是帮助服务器记住客户端状态(区分客户端)

2、会话技术:

①、从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。

②、会话技术分为Cookie 和Session:

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清楚cookie.

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力。

二、Cookie技术:

1、服务器向客户端发送一个Cookie(不能存中文)

Cookie cookie=new Cookie(String name,String value)

2、设置cookie在客户端的持久化时间:

cookie.setMaxAge(int seconds)

如果不设置持久化时间,cookie会存储到浏览器的内存中,浏览器关闭时cookie信息销毁。设置了的话,会在规定的时间内存在。

3、设置cookie的携带路径:

cookie.setPath(String path)

如果不设置携带路径,cookie信息在访问 产生 该cookie的web资源所在的路径 都携带cookie信息。

4、向客户端发送cookie

response.addCookie(Cookie cookie)

5、删除客户端的cookie

使用同名同路径的持久化时间为0的cookie进行覆盖

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//创建Cookie对象

Cookie cookie= new Cookie("godds","naiping");//设置持久化时间(从请求Servlet开始)

cookie.setMaxAge(60*2);//设置cookie携带路径(只有访问此路径才携带)//cookie.setPath("/WEB07/SendCookieServlet");

/*cookie.setPath("/WEB07");

cookie.setPath("/");*/

//发送

response.addCookie(cookie);

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//删除Cookie

Cookie cookie = new Cookie("goods","naiping");

cookie.setMaxAge(0);

response.addCookie(cookie);

}

6、服务器接收客户端携带cookie的方式:

以请求头的方式发送到服务器端的

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//获取cookie数组

Cookie[] cookies =request.getCookies();//遍历cookie数组通过cookie名获取cookie值

for(Cookie c:cookies){if(c.getName().equals("goods")){

System.out.println(c.getValue());

}

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//获取当前的时间对象

Date date = newDate();//创建日期转换类对象

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");//将日期对象转为字符串

String time =sdf.format(date);//创建cookie对象,记录当前访问时间

Cookie cookie = new Cookie("lastTime",time);

cookie.setMaxAge(60*10);//发送cookie

response.addCookie(cookie);//接收cookie

Cookie[] cookies =request.getCookies();//定义变量存储上次访问时间

String lastTime = null;//遍历

for(Cookie c:cookies){if(c.getName().equals("lastTime")){

lastTime=c.getValue();

}

}//解决响应乱码

response.setContentType("text/html;charset=utf-8");if(lastTime==null){//第一次访问

response.getWriter().write("您是第一次访问");

}else{

response.getWriter().write("您上次访问时间为"+lastTime);

}

}

三、Session技术:(一个域对象)

1、简介:

Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。

2、获得Session对象:

HttpSession session = request.getSession()

此方法会获得专属于当前会话(当前客户端)的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在session了)

3、域对象的存取数据;

4、生命周期:

①、创建:

第一次执行 request.getSession() 时创建

②、销毁:

服务器非正常关闭时;

Session 过期、失效(默认30分钟)

手动销毁Session

③、作用范围:

默认在一次会话中,也就是说,在一次会话中任何资源公用一个session对象。

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//获取Session域中的内容

HttpSession session =request.getSession();//获取Session中的内容

String goods = (String)session.getAttribute("goods");//解决乱码

response.setContentType("text/html;charset=utf-8");

response.getWriter().write(goods);

}

public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//获取Session对象

HttpSession session =request.getSession();//向Session域中存储数据(cookie不能存汉字)

session.setAttribute("goods", "奶瓶");//获取JESSIONID

String id =session.getId();//设置持久化时间---创建一个新的cookie设置其时间并覆盖原来的//创建Cookie

Cookie cookie = new Cookie("JSESSIONID",id);

cookie.setPath("/WEB08");

cookie.setMaxAge(60*3);//发送cookie

response.addCookie(cookie);

response.getWriter().write("JSESSIONID:"+id);//结果 JSESSIONID:0CDD85B8A6E216CA5BDA8E9729D5F230

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值