• Java开发系列-Cookie与Session会话技术


    概述

    会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话。会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一些数据,通过会话技术可以将其保存起来。常见的会话技术cookie、Session。

    Cookie

    Cookie称之为浏览器端的会话技术
    Cookie是由服务端生成,通过response将cookie写会浏览区(set-cookie),保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的Cookie(通过request请求头),我们服务就可以接受Cookie。

    Cookie基本使用

    // 创建Cookie
    Cookie cookie = new Cookie("key", "value");
    // 将cookie协会浏览器
    response.addCookie(cookie);
    
    // 获取浏览器携带的Cookie 返回的是Cookie数组
    Cookie[] cookies2 = request.getCookies();
    for (Cookie cookie2 : cookies2) {
    	// 获取某个cookie的key
    	String key = cookie2.getName();
    	String value = cookie2.getValue();
    }
    
    

    由于服务端可以向客户端通过response写入多个cookie,因此通过request获取cookie返回的是Cookie数组,如果之前未向浏览器写入过cookie,获取的cookie数组返回时null值不要直接就遍历,否则造成空指针异常。

    Cookie其它API

    // 设置Cookie有效域名
    void setDomain(String str); 
    // 设置Cookie的有效时长
    void setMaxAge(int maxAge);  setMaxAge(0); --- 删除持久的Cookie
    

    Cookie注意事项

    Cookie保存的时候一个浏览器上对Cookie的个数和大小都是由限制的.
    Cookie默认不能保存中文.
    - URLEncoder.encode();
    - URLDecoder.decode();

    Session

    Session称之为服务端的会话技术
    当我们第一次访问服务器的时候,服务器会获取SessionId,如果不能获取id,则创建一个session,将您的数据保存到session中,将当前的sessionId返回给浏览器。如果能获取到id,就根据此sessionId去获取Session,如果根据id获取不到session就创建一个session,将数据保存,返回id给客户端。返回id给客户端还是基于Cookie会话技术。

    Session基本使用

    // 根据request获取session
    HttpSession session = request.getSession();
    // 往session中写入数据 key value形式
    session.setAttribute("name", "jake");
    		
    // 根据key从session获取value
    session.getAttribute("name");
    

    Session的声明周期

    Session是一个域对象,保存在服务端,第一次调用request.getSession()创建。销毁三种情况

    • session过期:默认过期时间30分钟 web.xml默认配置
    • 非正常关闭服务器:(正常关闭服务器 序列化到硬盘)
    • 调用session.invalidate()
  • 相关阅读:
    Linux常用命令(5)--SSH访问远程服务器、SCP服务器间文件拷贝
    【转载】善用工具(1)--Mac版UltraEdit编辑器破解方法
    Linux常用命令(4)--善用"help"、"man在线帮助文档",轻松搞定系统命令
    Linux常用命令(3)--文件管理(查看文件大小权限信息、修改文件所属用户和操作权限、压缩解压文件)
    Linux常用命令(2)--vi (vim)文本编辑工具
    Linux常用命令(1)--用户管理(添加用户、修改密码、授予root权限)
    30分钟掌握ES6/ES2015核心内容(下)
    30分钟掌握ES6/ES2015核心内容(上)
    99%的人都理解错了HTTP中GET与POST的区别
    js中const,var,let区别
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9484578.html
Copyright © 2020-2023  润新知