javaee之cookie和session的见解和练习

 Cookie类: 用于管理会话数据的

        创建Cookie对象,用于存放会话数据

    Cookie c = new Cookie("name","value")

    把cookie发送给浏览器保存

      response.addCookie(c);

服务器接收浏览器返回的cookie数据

    Cookie[] cs = request.getCookies()


Cookie类的属性:

          name:  cookie的名称,用于获取cookie

          value:   cookie的值,用于存储会话数据

          path:  cookie的存储路径,存储路径决定浏览器是否携带cookie数据访问服务器

                        默认值:当前web应用路径 

         maxAge:  cookie在浏览器保存的最长时间。默认值为负数

                                负数:代表cookie保存在浏览器的缓存内存,浏览器关闭cookie丢失!

                               正数:  代表cookie保存在浏览器的缓存文件,浏览器关闭cookie不会 丢失,而是在到达过期时间才会丢失!

                                零:代表用于删除同路径同名的cookie


一、关于cookie会话的练习

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;

public class cookiedemo1 extends HttpServlet {

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

		//创建一个cookie对象
		Cookie cookie = new Cookie("product","tv");
		
		//修改cookie的路径
		cookie.setPath("/xxx");
		
		//修改cookie的缓存时间
		cookie.setMaxAge(1*60*60); //缓存一个小时
		
		//发送给浏览器
		response.addCookie(cookie);
	}

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

		doGet(request, response);
	}

}
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;

public class cookiedemo2 extends HttpServlet {

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

		Cookie[] cs = request.getCookies();
		
			if(cs != null){
				for(Cookie c : cs){
				System.out.println(c.getName() + "==" + c.getValue());
			}
			}else{
				System.out.println("没有缓存");
			}
		}
	

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

		doGet(request, response);
	}

}

二、关于cookie的用户上次访问时间

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class cookiedemo4 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		
		//格式化时间
		SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String curtime = simple.format(new Date());
		
		
		//得到cookie数据
		Cookie[] cookies = request.getCookies();
		
		String time = null;
		if(cookies != null){
			for(Cookie c : cookies){
				if(c.getName().equals("time")){
					time = c.getValue();
					response.getWriter().write("您上次访问的时间" + time);
					//更新cookie的时间
					c.setValue(curtime);
					response.addCookie(c);
				}
			}
			
		}
		
		
		//如果是第一次访问则创建cookie
		if(cookies == null || time ==null ){
			response.getWriter().write("你是首次访问:" + curtime );
			Cookie cookie = new Cookie("time",curtime);
			response.addCookie(cookie);
		}
	}
	
		
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

HttpSession开发步骤

HttpSession类:用于保存会话数据的

 创建一个HttpSession对象,用来保存数据

         HttpSession session =request.getSession()  

   把会话数据保存到HttpSession对象中

     session.setAttribute("name",Object);

 从HttpSession对象取出会话数据

   Object value = session.getAttribute("name");


session的管理原理

第一次访问服务器的时候,服务器会为这个浏览器分配一个HttpSession对象,返回一个该HtppSession对象的标记(JSESSIONID)(通过cookie响应头:set=cookie)

浏览器在下次访问服务器的时候,携带这个session标记(JSESSIONID)(通过cookie的请求头:cookie)



session的销毁时机:(关闭浏览器不会销毁HttpSession对象的)

 1、默认情况下,30分钟后服务器自动回收( 从最后一次访问开始算 )

2、手动修改session销毁时机:

setMaxInactiveInterval(int interval)  (单位:秒)

3、全站的所有session销毁时机:

在web.xml中配置一个session-config的数据,以分钟为单位的

4、 直接销毁session:    invalidate()


一、关于session的细节

import java.io.IOException;

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 sessiondemo1 extends HttpServlet {

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

		request.setCharacterEncoding("utf-8");
		
		String product = request.getParameter("product");
		
		HttpSession session = request.getSession();
		
		System.out.println("session的标记:" + session.getId());
		
		session.setMaxInactiveInterval(20);
		session.setAttribute("product", product);
		
		response.getWriter().write(product + "已经加入购物车了<a href='"+request.getContextPath()+"/sessiondemo2'>查看购物车</a>");
	}

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

		doGet(request, response);
	}

}

二、得到session的对象属性

import java.io.IOException;

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");
		
		HttpSession session = request.getSession();
		String product = (String) session.getAttribute("product");
		
		response.getWriter().write("当前购物车有" + product);
		
		session.invalidate();
		
	}

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

		doGet(request, response);
	}

}

关于cookie和session的区别:

cookie特点:

  1)cookie保存字符串数据  

  2)  一个cookie数据不能超过4KB,一个web应用不能超过20个cookie,一个浏览器最多300个cookie      

3)保存到cookie的数据相对不安全的       

session特点:

HttpSession的生命周期:

     创建: request.getSession()

    销毁:以上四种情况

   钝化(序列化):关闭服务器(把内存的HttpSession数据保存到了硬盘)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值