package pm_cn.itcast.session;
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;
import javax.servlet.http.HttpSession;
public class SessionServlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 实现 在 session域 中 的数据 共享
// 就会 创建 一个 session对象
// ( 判断 有没有 为 当前的 来访者的 浏览器 创建过 session 对象, 如果 已经创建过, 则 不再创建了 ,否则 就 创建一个)
HttpSession session = request.getSession();
session.setAttribute("name", "二蛋");
// 如何 实现 在 浏览器 关闭 之后 , 再次 去访问的 时候 , 找到 原来的 session 对象 呢 ?
// 解决方案 是 : 将 写回去的 cookie 给其 设置 一个 有效期, 使 之 成为 一个 持久化的 cookie 就可以了 .那么 浏览器关闭之后 , 这个 cookie 就仍然存在
// 下去访问的时候, 同样的 也会 带过去 .
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60*12);
cookie.setPath("/");
response.addCookie(cookie);
//第一次访问的响应头。
// Set-Cookie JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE; Path=/day12/;
// HttpOnly JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE; Expires=Wed, 04-Jun-2014 18:49:37 GMT; Path=/
//第二次访问的请求头,会带着JSESSIONID两个
//Cookie JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE; username=1; password=1; JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE
// 当浏览器 禁用了 所有的 cookie 之后 如何 实现 session 的 追踪 .
// 需要 通过 重写 url 路径来 实现 session的 追踪 , 就会拼接 jsessionid
String url = response.encodeURL("/day12/session2");
// 拼接 字符串
response.getWriter().print("<a href='"+url+"'>session2</a>");
// 通过 重写 url 路径来实现 禁用 cookie 后的 session 追踪
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
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;
import javax.servlet.http.HttpSession;
public class SessionServlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 实现 在 session域 中 的数据 共享
// 就会 创建 一个 session对象
// ( 判断 有没有 为 当前的 来访者的 浏览器 创建过 session 对象, 如果 已经创建过, 则 不再创建了 ,否则 就 创建一个)
HttpSession session = request.getSession();
session.setAttribute("name", "二蛋");
// 如何 实现 在 浏览器 关闭 之后 , 再次 去访问的 时候 , 找到 原来的 session 对象 呢 ?
// 解决方案 是 : 将 写回去的 cookie 给其 设置 一个 有效期, 使 之 成为 一个 持久化的 cookie 就可以了 .那么 浏览器关闭之后 , 这个 cookie 就仍然存在
// 下去访问的时候, 同样的 也会 带过去 .
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60*12);
cookie.setPath("/");
response.addCookie(cookie);
//第一次访问的响应头。
// Set-Cookie JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE; Path=/day12/;
// HttpOnly JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE; Expires=Wed, 04-Jun-2014 18:49:37 GMT; Path=/
//第二次访问的请求头,会带着JSESSIONID两个
//Cookie JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE; username=1; password=1; JSESSIONID=C5C52D7263C22A3E2864EFB270B93BCE
// 当浏览器 禁用了 所有的 cookie 之后 如何 实现 session 的 追踪 .
// 需要 通过 重写 url 路径来 实现 session的 追踪 , 就会拼接 jsessionid
String url = response.encodeURL("/day12/session2");
// 拼接 字符串
response.getWriter().print("<a href='"+url+"'>session2</a>");
// 通过 重写 url 路径来实现 禁用 cookie 后的 session 追踪
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}