Java实战之04JavaWeb-03会话技术

一、会话技术简介

1.什么是会话,为什么需要会话技术?

会话:从打开一个浏览器,访问某个网站,到关闭这个浏览器的这个过程称为一次会话。http协议是状态的。

2.会话技术的分类

客户端存储技术:Cookie

服务端存储技术:Session

Cookie和Session的区别?

1)存储在Cookie中的用户的信息 存在客户端,Session将数据存储在服务器端,但是需要在客户端存储Session的编码id

2)安全性而言 Cookie相对不安全 Session相对安全

3)性能而言:根据实际的情况

二、会话技术之Cookie

Cookie技术是将数据存储到客户端

1.怎样去向客户端写出一个cookie

1)创建Cookie对象

Cookie cookie = new Cookie(name,value);

2)向客户端写出cookie

response.addCookie(cookie );

客户端:客户端解析http响应,响应头中有一个cookie,客户端会自动将cookie的信息存储到客户端的缓存中

2.怎样从客户端获取一个Cookie

1)获得客户端携带的所有的cookie

Cookies[]  request.getCookies();

2)获得具体的某个cookie

遍历所有的cookie

通过getName()获得某一个cookie的名字

通过getValue()获得某一个cookie的值

3.设置Cookie时的细节

1)会话级别的cookie和持久级别的cookie

会话级别的cookie:会话结束cookie就清空

持久级别的cookie:会cookie存储到磁盘上

保存在磁盘上的时间

cookie.setMaxAge(秒);

注意:如果要想删除磁盘已经存储的cookie

将同名的cookie的持久化时间设置为0

将要删除的cookie的路径设置成与磁盘上存储的cookie的路径一致(即两个cookie的setPath一致)

2)设置cookie的携带的路径

cookie在默认情况下 会在产生的cookie资源的所在的目录下都携带

cookie.setPath(携带cookie的路径);

设置cookie的携带路径时以/开头,/代表本web服务器

例如:

cookie.setPath(“/”), cookie在访问web服务器下的所有资源的都携带

cookie.setPath(“/home”),在home应用时携带cookie

3)设置三方cookie(了解)

cookie.setDomain(域名);

三方cookie具有进攻性

4.以上代码实现

 1         response.setContentType("text/html;charset=UTF-8");
 2         //1、创建时间的Cookie
 3         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 4         String accessTime = format.format(new Date());
 5         Cookie cookie = new Cookie("accessTime",accessTime);
 6         //1.1 设置cookie的持久化的时间----在磁盘上存储的时间
 7         //cookie.setMaxAge(60*10);
 8         //1.2 设置cookie的携带路径  /代表web服务器
 9         cookie.setPath("/day11_208/abc/accessTime");
10         //2、将cookie写给客户端
11         response.addCookie(cookie);
12         //3、获取客户端携带的时间的cookie
13         String accessTime_client = null;
14         Cookie[] cookies = request.getCookies();
15         if(cookies!=null){
16             for(Cookie coo:cookies){
17                 //取出美哟个cookie对象的名字
18                 String cookieName = coo.getName();
19                 if("accessTime".equals(cookieName)){
20                     //取出该cookie的值
21                     accessTime_client = cookie.getValue();
22                 }
23             }
24         }
25
26         //4、为用户显示上次访问时间
27         if(accessTime_client!=null){
28             response.getWriter().write("您的上一次访问时间是:"+accessTime_client);
29         }else{
30             //第一次访问
31             response.getWriter().write("您是第一次访问");
32         }

三、会话技术之Session

1.怎样去创建session/获得session

HttpSession session = request.getSession();

上述方法的内部原理:

当request在调用getSession方法时,内部会去查看一下该用户是否在web应用的内部存在一块内存区域,如果有直接返回这个内存区域的地址,如果没有就创建一个新的session区域

服务器端通过什么判断用户是否已经存在session的呢?

根据session的编号id--->JSESSIONID

2.session的生命周期

创建:第一次调用request.getSession()

销毁:

1)服务器关闭 session销毁

2)session超时 默认30分钟

计算点从何时开始:最后一次操作该站点后的30分钟

3)手动销毁session

session.invalidate();

3.Session是一个域对象

Session是借助于Cookie的,同一个Session的标志就是JSESSIONID相同。

如果将浏览器关闭,在打开访问资源,会重新创建session

怎样将session持久化----->存储JSESSIONID的Cookie持久化

抓包工具获得:

Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/day11_208/;

手动创建一个Cookie 在上面的cookie的基础上 多一个max-age

1         //手动创建Cookie存储JSESSIONID
2         //Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/home/;
3         Cookie cookie = new Cookie("JSESSIONID",session.getId());
4         cookie.setPath("/home/");
5         cookie.setMaxAge(60*10);
6
7         response.addCookie(cookie);

如果客户端禁用Cookie,客户端不能在存储Cookie,JSESSIONID丢失,解决?

解决方案:URL重写,在每个url地址后都使用分号;拼接JSESSIONID

1         HttpSession session = request.getSession();
2         System.out.println(session.getId());
3         String url = "/home/index.jsp";
4         url = response.encodeRedirectURL(url);
5         System.out.println(url);
6         response.sendRedirect(url);

http://localhost/home/index.jsp;jsessionid=377B2F0501FF9FE643D7D88F4E883FFD

时间: 2024-10-27 14:16:33

Java实战之04JavaWeb-03会话技术的相关文章

Java Web之会话技术

客户端与服务器通信过程中,会产生一些数据.比如,A和B分别登陆了某宝购物网站,A买了一个Android手机,B买了一个iPhone手机,当结账时,web服务器需要分别对用户A和B的信息分别保存.根据Java Web之Servlet技术中所说,HttpServletRequest对象和ServletContext对象都可以保存数据,但是这二者在该情形下是不适合使用的. 客户端的每次请求,服务器都会产生一个HttpServletRequest对象,该对象只保存本次请求所传递的数据.由于购买和结账是两

JAVA web 会话技术Cookie&Session

会话技术,指的是从打开浏览器开始访问某个站点,到关闭浏览器的整个过程,称为一次会话. 会话技术分为Cookie和Session. Cookie是指 将数据存储在本地,减少服务器的存储压力,安全性不好,客户端可清除Cookie. Session是指将数据存储在服务器,增加服务器的存储压力,安全性高,客户端不可清除. 一.Cookie技术 (一). 服务器端怎么发送一个Cookie到客户端 1.创建一个Cookie Cookie cookie = new Cookie( String cookieN

JAVA实战教程_JAVA案例开发之JAVA开发微信二维码大数据开发03

大家好,这次是第三个课时的视频,欢迎大家继续学习. 视频简介:本视频是关于JAVA实战教程,JAVA开发微信二维码大数据系统.这个JAVA开发案例可以协助一些从零基础开始学习JAVA,正处于理论走完实践的路程上的初学者能接触到实际开发项目过程中,在实践当中巩固自己的JAVA方面的知识外,更能在项目案例当中学到解决在JAVA学习或者实践当中遇上问题的一些解决方式.仅供参考!自设交流群:457036818,欢迎一起加入交流. PS:该案例共十个课时,本小节为第二课时 课程原地址:http://www

Java开发系列-Cookie与Session会话技术

概述 会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一些数据,通过会话技术可以将其保存起来.常见的会话技术cookie.Session. Cookie Cookie称之为浏览器端的会话技术. Cookie是由服务端生成,通过response将cookie写会浏览区(set-cookie),保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的Coo

JAVA基础之会话技术-Cookie及Session

至此,学习三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束.在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值.数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁! 一.会话技术简介: 1.存储客户端的状态: 因为Http协

JSP入门&会话技术

一.JSP    1.jsp技术        jsp是sun提供动态web资源开发技术.为了解决在Servlet中拼写html内容css.js内容十分不方便的问题,sun提供了这样一门技术.如果说Servlet是在java中嵌套HTML,则jsp就是在HTML中嵌套java代码,从而十分便于组织html页面                jsp页面在第一次被访问到时会被jsp翻译引擎翻译成一个Servlet,从此对这个jsp页面的访问都是由这个Servlet执行后进行输出           

JavaWeb学习笔记五 会话技术Cookie&Session

什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器记住客户端状态(区分客户端). 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会话技术就是记录这次会话中客户端的状态与数据的.会话技术分为Cookie和Session: Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除

会话技术: Cookie 和 Session

会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保存在客户端,Session将数据保存在服务器端. Cookie技术 1.Cookies是存储在客户机的文本文件,可以保存一系列的信息.通常服务器有三个步骤来识别不同的客户机: 服务器脚本发送一系列cookies至浏览器.比如名字,年龄,ID号码等等. 浏览器在本地机中存储这些信息. 当下一次浏览器发

干货系列1:Java互联网网站开发工程师 的技术提高与晋升路线(技术专精)

前几天写了自己对于Java软件开发工程师职业发展规划方面的一些感悟,陆续收到一些反馈,希望我能再就Java工程师不同的开发(职责)方向谈谈职业发展问题.(上一篇:Java软件开发工程师的自我修养与晋升(B/S结构)下面就具体谈谈Java程序员的另一个职责方向:Java互联网开发工程师 Java互联网开发工程师的主要岗位职责是: 负责网站平台的系统设计.数据库设计.代码开发,以及技术攻关的工作. 职业发展道路基本有3条: 第一条路线(技术专精): 初级Java开发---中级--高级---项目主管-