javaee之cookie和session的见解和练习

来源:互联网 发布:匡恩网络 知乎 编辑:程序博客网 时间:2024/06/05 20:39

 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);}}}//如果是第一次访问则创建cookieif(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数据保存到了硬盘)


0 0