0x01 前言
会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。
Cookie: 通过在客户端本地存储数据来记录信息确定用户身份,会减少服务器端的存储的压力,但是安全性不好,客户端可以增删改Cookie
Session: 通过在服务端存储数据来记录信息确定用户身份,安全性相对来说比Cookie,但是因为数据存储在服务端会增加服务端的压力
0x02 基本使用
// 使用例子# 目录结构├── src│ └── main│ └── webapp│ └── com│ └── Servlet│ ├── ...│ ├── CookieTest1.java│ └── SessionTest2.java│ └── WEB-INF│ └── web.xml│ └── index.jsp
0x02.1 Cookie基本使用
// 基本使用方法// 创建Cookie对象Cookie cookie = new Cookie(String cookieName,String cookieValue);// 设置cookie的最大有效时间// 单位秒cookie.setMaxAge(10 * 60);// 设置为-1, 是相当于浏览器关闭就消失cookie.setMaxAge(-1);// 利用有效时间为0, 可以删除这个Cookiecookie.setMaxAge(0);// 设置cookie携带的路径cookie.setPath("/WEB/getCookie"); // 访问/WEB/getCookie资源时,才携带这个cookiecookie.setPath("/WEB"); // 访问/WEB下的任何资源时都携带这个cookiecookie.setPath("/"); // 访问服务器下的所有的资源都携带这个cookie// 将cookie中存储的信息发送到客户端response.addCookie(cookie);
package com.Servlet;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/CookieTest1")public class CookieTest1 extends HttpServlet {/*** @param request* @param response* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 设置CookieCookie cookie = new Cookie("ck", "cv");cookie.setMaxAge(10 * 60);cookie.setPath("/");response.addCookie(cookie);// 读取CookieCookie[] cookies = request.getCookies();if (cookies != null) {for (Cookie c : cookies) {response.getWriter().println(" ");response.getWriter().println("cookieKey: " + c.getName());response.getWriter().println("cookieValue: " + c.getValue());response.getWriter().println(" ");}}response.getWriter().println("okk");}}// 执行该文件// 例如: http://127.0.0.1:8081/mavenJspTest_war/CookieTest1
0x02.2 Session基本使用
// 基本使用方法// 创建Session对象HttpSession session = request.getSession();// 设置属性session.setAttribute(String name,Object obj);// 获取属性session.getAttribute(String name);// 删除session.removeAttribute(String name);// 获得sessionIDsession.getId();// 创建时间session.getCreationTime();// 获取最后访问时间session.getLastAccessedTime();// 获得session的最大存活时间,默认是1800秒session.getMaxInactiveInterval();// 手动销毁session,杀掉会话session.invalidate();// 查看当前获得的session是否是新的// 同一个session对象,只有在创建的第一次会返回true,其它都是false// 注意: 想要测试这个,最好使用浏览器的隐身窗口打开,这样才可以保住浏览器的session对象是新建的session.isNew();
package com.Servlet;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;@WebServlet("/SessionTest2")public class SessionTest2 extends HttpServlet {/*** @param request* @param response* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 设置SessionHttpSession session = request.getSession();String sessionKey = "ss";String sessionValue = "sv";session.setAttribute(sessionKey, sessionValue);// 读取Sessionresponse.getWriter().println(" ");response.getWriter().println("isNew? : " + session.isNew());response.getWriter().println("sessionID: " + session.getId());response.getWriter().println("sessionKey: " + sessionKey);response.getWriter().println("sessionValue: " + session.getAttribute(sessionKey));response.getWriter().println(" ");response.getWriter().println("okk");}}// 执行该文件// 例如: http://127.0.0.1:8081/mavenJspTest_war/SessionTest2
0x03 小结
大概知道Cookie与Session对象是如何使用的即可,心里有个底子,以后要进行代码审计了,就可以知道那一些是我们可控的或是间接可控的

