Session
什么是Session
使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。Session技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 。 客户端需要接收、记忆和回送 Session的会话标识号,Session可以且通常是借助Cookie来传递会话标识号。
Session的跟踪机制
Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。
HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。
WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的HttpSession对象。
WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。
WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内存之中,该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。
HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中,还定义了一个getAttribute方法来检索存储在HttpSession对象中的对象,存储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。
Session是实现网上商城的购物车的最佳方案,存储在某个客户Session中的一个集合对象就可充当该客户的一个购物车。
Session的超时管理
WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之对应的HttpSession对象。
随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会因此积累起大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。
WEB服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,WEB服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的HttpSession对象变成垃圾。
如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。
会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。
 <session-config>
  <session-timeout>30</session-timeout>
 </session-config>
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
Session和Cookie的主要区别在于:
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
IE禁用Cookie后的session处理
解决方案:URL重写
response. encodeRedirectURL(java.lang.String?url)
用于对sendRedirect方法后的url地址进行重写。
response. encodeURL(java.lang.String?url)
用于对表单action和超链接的url地址进行重写
session案例----------------
使用Session完成简单的购物功能:
首页
package com.hbsi.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class IndexServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  
  request.getSession();
  
  String url1 = response.encodeURL("/SessionDemoNew/servlet/SessionDemo1");
  String url2 = response.encodeURL("/SessionDemoNew/servlet/SessionDemo2");
  
  out.print("<a href='"+url1+"'>购买</a>"); 
  out.print("<a href='"+url2+"'>结账</a>");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

doGet(request, response);
 }

}
两个互动页面:
①package com.hbsi.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionDemo1 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  HttpSession session = request.getSession();
  
  String id = session.getId();
  Cookie cookie = new Cookie("JSESSIONID",id);
  cookie.setMaxAge(30*60);
  response.addCookie(cookie);
  
  
  session.setAttribute("name","手机");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

doGet(request, response);
 }

}

package com.hbsi.session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionDemo2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  
  HttpSession session = request.getSession();
  String value = (String) session.getAttribute("name");
  out.print("您购买的商品是:"+value);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

doGet(request, response);
 }

}

11 java 王少飞-Session相关推荐

  1. 11 java 王少飞-Java语言的主要特性分析

                                                Java语言的主要特性分析 1.Java语言是简单的. Java语言的语法与C语言和C++语言很接近,使得大多数 ...

  2. 暑假社会实践总结_Java—王少飞

                                                                                                        ...

  3. JAVA王大师-易经风水布局秘笈

    <易经风水布局秘笈>之 <风水一点通> 写在前面的话 技法简介 第一章 基础理论 第二节 八卦大游年 第三节 宫星相克 第四节 九星兴败 第五节 化象 第六节 五鬼穿家 第七节 ...

  4. 王鸿飞:十有八九的博士和博导不合格

    source:  http://discover.163.com/07/1002/11/3PPV3V23000125LI.html 科学网讯,针对"国务院学位委员会. 教育 部.人事部将要开 ...

  5. Spread for WinForms 电子表格控件基础视频教程-王继飞-专题视频课程

    Spread for WinForms 电子表格控件基础视频教程-23145人已学习 课程介绍         Spread for WinForms 电子表格控件基础视频教程 课程收益      讲 ...

  6. 大咖分享|王少锋:深度解析DCMM数据管理成熟度模型

    讲师介绍 王少锋,御数坊咨询总监,数据标准化及治理领域专家.拥有IT行业10余年.数据标准化及治理领域9年从业经验:国家大数据标准工作组成员,ITSS数据治理标准工作组成员.已获得数据管理专业认证(C ...

  7. NC | 四川大学华西二院王少璞构建大型婴幼儿肠道菌群参考目录

    https://doi.org/10.1038/s41467-022-32805-z 人体肠道中共生着大量微生物,他们参与机体营养代谢,影响肠道免疫系统,调节人体健康状态.肠道菌群发育具有生命阶段特异 ...

  8. osx java 6_OSX 10.11 java 6不兼容怎么办?OSX 10.11 java 6不兼容解决办法

    OSX 10.11 java 6不兼容怎么办?有很多用户在使用最新的OSX 10.11系统时会发现java SE 6不兼容的问题,其实要解决 这个问题比较简单,用户需要下载安装最新的Java SE 8 ...

  9. Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用

    ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...

最新文章

  1. 厉害了,程序员的高考试卷,你能拿几分?
  2. 和 Houdini, CSS Paint API 打个招呼吧
  3. Cloudflare的HTTP/2优化策略
  4. phpize增加php模块
  5. excel vba 从入门到精通_VBA词汇-基本元素篇
  6. 参数详解 复制进程_如何优化PostgreSQL逻辑复制
  7. Python之线程(一)
  8. captcha must be filled out_直播行业这些英文单词,不知道你就out了
  9. 深挖 AI 价值与温度,AETA 地震预测 AI 算法大赛开启
  10. java程序中oracle回滚,Oracle的DDL语句不能回滚(直接提交)
  11. Navicat基础mysql语法
  12. stm8s103k3 周期 捕获_基于stm8s103k3单片机串口UART的正确使用分享
  13. 2020年的成长印记
  14. JAVA :一张纸厚0.5mm //0.0005m,折叠多少次,厚度会超过珠穆朗玛峰?(8848.43m)
  15. python需要cpu还是显卡问题_买新电脑是cpu重要还是显卡重要?该怎么选择?
  16. UVa 10387 Billiard
  17. Matlab矩阵幂运算
  18. 从国外的网站上下载包很慢的解决办法
  19. android swf 播放器代码,Android Flash swf播放器源码(2016),技术稳定可以商用—— BY softboy...
  20. 持之以恒,不仅仅是说说而已

热门文章

  1. 2021年安全员-C证(陕西省)报名考试及安全员-C证(陕西省)考试APP
  2. laravel 实战 总结
  3. 基于瑞萨RH850的BootLoader调试问题记录
  4. 用VC++编写勾子程序
  5. Liferay新注册用户缺省页面的研究
  6. 多说都是泪 GDUT 广东工业大学2016校赛决赛-网络赛 1170 Problem B Sward Art Online
  7. Reverse a Singly LinkedList
  8. [日推荐] 『忆年共享相册』-照片鉴证一起走过的哪些年
  9. 计算机应用毕业作品,全国“创新杯”计算机应用基础类说课大赛优秀作品:毕业展示会策划文案(美化后)...
  10. 微盾php脚本加密算法,微盾PHP加密专家(PHPCodeLock)