会话技术Cookie与Session

从打开一个浏览器到访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端状态与数据的

会话技术分为Cookie和Session

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

  Session:将数据储存在服务器端,安全性相对较好,但增加服务器压力

Cookie

将数据储存到客户端

1.服务器端向客户端发送一个Cookie

  创建Cookie:Cookie cookie=new Cookie(String cookieName,String cookieValue);

    例如:Cookie cookie=new Cookie("username","zhangsan");//cookie会以响应头的形式发送给客户端,Cookie不能存储中文

  设置Cookie在客户端的持久化时间:cookie.setMaxAge(int seconds);--时间秒

    注意:如果不设置持久化时间,cookie会储存在浏览器内存中,关闭浏览器cookie信息销毁,如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里

    例如:cookie.setMaxAge(10*60);//设置cookie在浏览器中存储时间10分钟,过期自动删除

  设置Cookie携带路径:cookie.setPath(String path);

    注意:如果不设置路径,访问产生该cookie的web资源所在路径,并且web路径下都携带cookie信息

    例如:cookie.setPath("/WEB01");//代表访问WEB01应用中任何资源都携带cookie

  向客户端发送cookie:response.addCookie(Cookie cookie);

  删除客户端cookie:使用同名同路径持久化时间为0的cookie覆盖即可

2.服务器端接收客户端发送的cookie

  通过request获得所有Cookie:Cookie[] cookie=request.getCookies();

  遍历Cookie数组,通过Cookie名称获得:

for(Cookie cookie:cookies){
    if(cookie.getName().equal(cookieName)){
        String cookieValue=cookie.getValue();
    }
}

Session

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

1.获得Session对象:HttpSession session=request.getSession();

  获取专属于当前会话的Session对象,如果服务器端没有给会话的Session对象,会创建一个新的Session返回,如果已经有了属于该会话的Session,直接将已有的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在Session了)

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建属于该客户端(会话)的私有的session区域
//    request.getSession()方法内部会判断 该客户端是否在服务器端已经存在session
//    如果该客户端在此服务器不存在session 那么就会创建一个新的session对象
//    如果该客户端在此服务器已经存在session 那么就获得已经存在的该session返回
        HttpSession session=request.getSession();
        String id=session.getId();//该session对象的编号id
        response.getWriter().write("JSESSIONID:"+id);
}

2.Session域中存取数据的三种方法

  session.setAttribute(String name,Object obj)

  session.setAttribute(String name)

  session.removeAttribute(String name)

3.Session对象生命周期

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

  销毁:服务器(非正常)关闭时

    session失效(默认30分钟)

    手动销毁session:session.invalidate();

  作用范围:默认在一次会话中,也就是说在一次会话中任何资源公用一个session对象

原文地址:https://www.cnblogs.com/wode007/p/13515760.html