关于Session和Cookie简要描述

session介绍

session的工作原理

(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
value为SessionId不存在**(Session对象默认存活30分钟)**,返回1中重新去创建Session与特殊的Cookie
value为SessionId存在,返回session对象

session的持久性问题,默认是30分钟,三种手动配置,如下

#直接在web.xml里面配置
<session-config> <session-timeout>30session-timeout> session-config>//单位为分钟 
#在tomcat下的server.xml中配置
<Context path="/livsorder" docBase="/home/httpd/html/livsorder"    
  defaultSessionTimeOut="3600" isWARExpanded="true"    
  isWARValidated="false" isInvokerEnabled="true"  isWorkDirPersistent="false"/>  

	# 但是这里要每次都设置比较麻烦
   session.setMaxInactiveInterval(30 * 60)

cookie介绍

1.Cookie的工作原理

(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户

2.cookie的路径设置问题

@RequestMapping(value = "/createCookie", method = RequestMethod.GET)
    public void testCreateCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {

        response.getWriter().write("create new cookie\n");
        Cookie age = new Cookie("age", "22");

        System.out.println(age.getPath());
        age.setPath("/cookie/getCookiesInclient"); //这里设置路径后,只有访问该路径下时,并且在过期时间之内,才可以访问到此cookie
		age.setMaxAge(60);
		//设置持久化时间,当浏览器关闭时,会自动将其持久化到浏览器的磁盘文件中,过期时间一到就会删除;
		//当然不关闭浏览器,过期时间一到也同样会删除
        response.addCookie(age);



        response.getWriter().write(age.getName()+" = " + age.getValue());
        response.getWriter().flush();
    }

    @RequestMapping(value = "/getCookiesInclient", method = RequestMethod.GET)
    public void testGetCookies(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                response.getWriter().write(cookie.getName()+" = " + cookie.getValue() + "\n");
               
            }


        } else {
            response.getWriter().write("none\n");
        }
        response.getWriter().flush();
    }

    @RequestMapping(value = "/getCookiesInserver", method = RequestMethod.GET)
    public void testGetCookiesInserver(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                response.getWriter().write(cookie.getName()+" = " + cookie.getValue() + "\n");
                 //这里是访问不到Cookie("age", "22")的
            }


        } else {
            response.getWriter().write("none\n");
        }
        response.getWriter().flush();

    }

你可能感兴趣的:(网络)