由于Http是无状态的须要会话技术来区别客户端是谁发送的请求html
会话技术(响应头是设置cookie的,请求头是携带cookie值的):是从打开一个浏览器直到关闭这个浏览器为止整个过程是一次会话,会话技术就是记录客户端的状态和数据的数组
会话技术分为:Cookie和Session;Cookie(在客户端存储数据,也就是缓存,缓解服务器压力可是不安全):数据存储在客户端本地,减小服务器端存储的压力,不安全,客户端能够清楚Cookie浏览器
Session(单独在服务器开辟一块内存区域,加剧了服务器压力,可是安全):将数据存储在服务器端,安全性相对较好,增长服务器压力缓存
建立Cookie(以键值对的形式存数据,不能存中文,关闭浏览器后Cookie消失):Cookie cookie=new Cookie(String CookieName,String CookieValue);安全
Cookie在客户端持久化(Cookie自动向服务器端发送信息,可是服务器端须要去接收否则没有用):cookie.setMaxAge(120(时间:持续2分钟))若是不设置持久化时间,cookie会存储在浏览器内存中,关闭浏览器,cookie就会销毁(会话级别的cookie),若是设置了持久化时间,cookie信息会被持久化到浏览器的磁盘文件夹(就是浏览器的安装路径)服务器
建立cookie对象:Cookie cookie=new Cookie("name","小明");以键值对的形式存进cookiecookie
设置cookie的持久化时间:cookie.setMaxAge(120);这里的时间单位是秒iphone
将cookie发送到客户端:response.addCookie(cookie)指针
第一次请求的时候,请求头是没有cookie的由于cookie得须要服务器取建立,因此第一次的响应头有cookie二请求头 没有cookieorm
第二次请求服务器的时候,由于第一次已经把cookie传给了浏览器因此第二次访问服务器就会携带cookie(由于是 第一次服务器给的)
cookie.setPath("/WEB0917");这里个是WEB0917下的资源都携带
cookie.setPath("/");这个是只要访问服务器下的全部资源都携带
cookie.setPath();若是不设置携带路径:当你访问产生改cookie的路径的路径携带
删除cookie:由于cookie不能删除只能设置一个持久是0的同名且同路径的cookie代替了并删除原来的cookie
删除cookie
Cookie cookie=new Cookie("goods","iphone11");
//设置持久化时间为0
cookie.setMaxAge(0);//设置0是立马删除cookie;关闭浏览器是结束一次会话,不同
cookie.setPath("/WEB0917");//这里的路径要和建立的cookie的路径同样
//删除的条件是,两个cookie的名字和路径要同样,且第二个cookie的持续时间要是0;这样就删除了
//发送cookie
response.addCookie(cookie);//用这个持久是0的cookie把同名路径的持久时间长的cookie给代替掉,0时间也就删除了
//获取Cookie从request对象中获取Cookie数组
Cookie[] cookies=request.getCookies();
for(Cookie c:cookies){
if(c.getName().equals("goods")){//这里是经过.getName()获得name并用.equals("goods")比较肯定
System.out.println(c.getValue());//若是是goods就取出值 }}
每次访问显示上次访问的时间
//建立日期对象,记录当前访问时间Date date=new Date();//转换日期格式SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//获取转换后的日期字符串String currentTime=sdf.format(date);//建立cookie对象//由于cookie只能传英文因此上面dsf的格式是"yyyy-MM-dd HH:mm:ss"Cookie cookie=new Cookie("LastTime",currentTime);//设置持久化时间cookie.setMaxAge(60*10);//发送cookieresponse.addCookie(cookie);//获取客户端携带的cookie --LastTimeCookie[] cookies=request.getCookies();String lasttime=null;//遍历获取name是lasttime的cookie对象中的value值if(cookies!=null){ //这里得加一个cookies是null的断定,若是不是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);}