2018-09-08Cookie的发送和Cookie的读取+Session基本原理

Posted postgredingdangniu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-09-08Cookie的发送和Cookie的读取+Session基本原理相关的知识,希望对你有一定的参考价值。

Cookie会话技术:

不值得上传到服务器并且保存在数据库的数据保存在Cookie中!

 

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话!

会话技术就是记录这次会话中客户端态的状与数据的!

 

会话技术分为CookieSession

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端  可以清除Cookie

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力!

 

Cookie技术可以分为两方面学习:

服务器端怎样将一个Cookie发送到客户端!

服务器端怎样接收客户端携带的Cookie

 

Cookie中只可以写英文不可以写中文!

 

如果不设置持久化时间,Cookie会存储在浏览器的内存中,浏览器关闭  Cookie信息销毁(会话级别的Cookie),如果设置持久化时间,Cookie信息会  被持久化到浏览器的磁盘文件里!

 

如果不设置携带路径,那么该Cookie信息会在访问产生该CookieWeb资源所在的路径(Web项目的服务器路径)都携带Cookie信息!

 

 

发送Cookie示例代码:

package com.oracle.demo01;
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 SendCookie extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie:
        Cookie Cookie=new Cookie("goods","phone");
        //设置Cookie持久化存储时间,也就是Cookie在硬盘上保存的时间:
        Cookie.setMaxAge(3*60);
        //设置Cookie携带路径,只有访问/Web06/SendCookie的时候才会携带Cookie信息:
        //Cookie.setPath("/Web06/SendCookie");
        //只要访问Web06下的资源都携带Cookie,默认是/Web06:
        //Cookie.setPath("/Web06");
        //只要访问服务器下的所有资源都携带Cookie:
        //Cookie.setPath("/");
        //发送Cookie至客户端:
        response.addCookie(Cookie);
        //第一次访问请求没有,第二次访问请求访问都有!
        //一次会话是根据浏览器开启与关闭来判定的!
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

服务器接收客户端携带的Cookie信息示例代码:

package com.oracle.demo01;
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 GetCookie extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得客户端携带的Cookie的数据:
        Cookie[] Cookies=request.getCookies();
        //遍历,通过Cookie名称获得想要的Cookie值:
        for(Cookie Coo:Cookies){
            if(Coo.getName().equals("goods")){
                String value=Coo.getValue();
                System.out.println(value);
            }
        }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

服务器移除客户端Cookie示例代码:

package com.oracle.demo01;
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 RemoveCookie extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie:
        Cookie Cookie=new Cookie("goods","phone");
        //设置携带路径:
        Cookie.setPath("/Web06/SendCookie");
        //设置持久化时间:
        Cookie.setMaxAge(0);
        //发送Cookie至客户端:
        response.addCookie(Cookie);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

Seesion技术:

Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间;所以说Session的实现是基于CookieSession需要借助于Cookie存储客户的唯一性标识JSESSIONID

 

//Session技术是依托于Cookie来实现的!

 

强调:

当创建一个Session域时,TomCat内核会看看客户端有没有已有的存储SessionCookie,如果有,则把服务器端已有的JSessionID给客户端,如果没有该存储SessionCookie的话,TomCat内核会重新分配一个JSessionID给客户端!

 

//不同浏览器有不同的JSessionID

 

获得Seesion域对象:

HttpSession Session = request.getSession();

 

Session也是存储数据的区域对象,所以session对象也具有如下三个方法:

session.setAttribute(String name,Object obj);

session.getAttribute(String name);

session.removeAttribute(String name);

 

面试题:

创建:第一次执行request.getSession()时创建!

销毁:

    服务器非正常关闭时!

    Session过期/失效(默认30分钟),默认在服务器消失(Tips:如果想要延长Session在服务器的存留时间,请在自定义的Web.xml文件中定义Session的生命周期,可以复制TomCatSession设置来重新定义)!

    调用Session.invalidate();方法手动销毁!

 

 

Session域的作用范围:默认在一次会话中,任何资源共用一个Session

Cookie会话技术:

不值得上传到服务器并且保存在数据库的数据保存在Cookie中!

 

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话!

会话技术就是记录这次会话中客户端态的状与数据的!

 

会话技术分为CookieSession

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端  可以清除Cookie

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力!

 

Cookie技术可以分为两方面学习:

服务器端怎样将一个Cookie发送到客户端!

服务器端怎样接收客户端携带的Cookie

 

Cookie中只可以写英文不可以写中文!

 

如果不设置持久化时间,Cookie会存储在浏览器的内存中,浏览器关闭  Cookie信息销毁(会话级别的Cookie),如果设置持久化时间,Cookie信息会  被持久化到浏览器的磁盘文件里!

 

如果不设置携带路径,那么该Cookie信息会在访问产生该CookieWeb资源所在的路径(Web项目的服务器路径)都携带Cookie信息!

 

发送Cookie示例代码:

package com.oracle.demo01;

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

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

              //创建Cookie

              Cookie Cookie=new Cookie("goods","phone");

              //设置Cookie持久化存储时间,也就是Cookie在硬盘上保存的时间:

              Cookie.setMaxAge(3*60);

              //设置Cookie携带路径,只有访问/Web06/SendCookie的时候才会携带Cookie信息:

              //Cookie.setPath("/Web06/SendCookie");

              //只要访问Web06下的资源都携带Cookie,默认是/Web06

              //Cookie.setPath("/Web06");

              //只要访问服务器下的所有资源都携带Cookie

              //Cookie.setPath("/");

              //发送Cookie至客户端:

              response.addCookie(Cookie);

              //第一次访问请求没有,第二次访问请求访问都有!

              //一次会话是根据浏览器开启与关闭来判定的!

       }

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

              doGet(request, response);

       }

}

 

服务器接收客户端携带的Cookie信息示例代码:

package com.oracle.demo01;

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

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

              //获得客户端携带的Cookie的数据:

              Cookie[] Cookies=request.getCookies();

              //遍历,通过Cookie名称获得想要的Cookie值:

              for(Cookie Coo:Cookies){

                     if(Coo.getName().equals("goods")){

                            String value=Coo.getValue();

                            System.out.println(value);

                     }

              }

       }

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

              doGet(request, response);

       }

}

 

服务器移除客户端Cookie示例代码:

package com.oracle.demo01;

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

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

              //创建Cookie

              Cookie Cookie=new Cookie("goods","phone");

              //设置携带路径:

              Cookie.setPath("/Web06/SendCookie");

              //设置持久化时间:

              Cookie.setMaxAge(0);

              //发送Cookie至客户端:

              response.addCookie(Cookie);

       }

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

              doGet(request, response);

       }

}

 

Seesion技术:

Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间;所以说Session的实现是基于CookieSession需要借助于Cookie存储客户的唯一性标识JSESSIONID

 

//Session技术是依托于Cookie来实现的!

 

强调:

当创建一个Session域时,TomCat内核会看看客户端有没有已有的存储SessionCookie,如果有,则把服务器端已有的JSessionID给客户端,如果没有该存储SessionCookie的话,TomCat内核会重新分配一个JSessionID给客户端!

 

//不同浏览器有不同的JSessionID

 

获得Seesion域对象:

HttpSession Session = request.getSession();

 

Session也是存储数据的区域对象,所以session对象也具有如下三个方法:

session.setAttribute(String name,Object obj);

session.getAttribute(String name);

session.removeAttribute(String name);

 

面试题:

创建:第一次执行request.getSession()时创建!

销毁:

    服务器非正常关闭时!

    Session过期/失效(默认30分钟),默认在服务器消失(Tips:如果想要延长Session在服务器的存留时间,请在自定义的Web.xml文件中定义Session的生命周期,可以复制TomCatSession设置来重新定义)!

    调用Session.invalidate();方法手动销毁!

 

Session域的作用范围:默认在一次会话中,任何资源共用一个Session

以上是关于2018-09-08Cookie的发送和Cookie的读取+Session基本原理的主要内容,如果未能解决你的问题,请参考以下文章

会话 Cookie 和Session

cookie的使用

cookie预:

cookie 和 session

什么是cookie?

将 JWT RefreshToken 作为 Set-Cookie 发送