会话技术
* 客户端与服务端之间的交互 就是会话
* 什么是会话? 相当于打电话
* 访问网页时 只要浏览器不关闭
* 点击多次连接 也叫一次会话。
* 关闭浏览器 就结束会话了
* 1.客户端技术
* Cookie 保存在客户端(浏览器)就是一个文件
* 每一个站点(网站)可以保存20个cookie
* 每个浏览器可以保存300个cookie
* 每个cookie可以保存4kb的数据
* cookie默认存活时间 一次会话(关闭浏览器 cookie被清除)
* 默认是保存在 浏览器的内存当中
* 可以设置cookie的存活时间 1年
* 浏览器就会将cookie保存到硬盘当中(保存到文件中)
* 注意:cookie不能保存中文
*
* 设置cookie的存活时间
* setMaxAge(时间 以秒为单位)
* 整治:值是多少 浏览器就保存多少秒
* 负值:浏览器不会存储cookie到硬盘当中
* 当浏览器关闭 会话结束 这个cookie被删除
* 0时 cookie被删除
*
* 2.服务端技术 HttpSession
* Session是保存在服务端
*
* 需求:显示上一次(最后)的登录时间
* (关闭浏览器之后 再访问还能显示)
*
* 第一次访问servle时 将时间保存到cookie
* 再响应回浏览器 让浏览器存储起来
* 下一次再访问时 通过request请求
* 获取之前保存的cookie 显示之前存储时间即可
public class Demo04 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
// 接到请求先读取cookie
// 获取请求的cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
// 遍历cookie的数组
for (Cookie cookie : cookies) {
// 找出之前保存的cookie按名字
if (cookie.getName().equals("lastTime")) {
// 获取cookie的值
String value = cookie.getValue();
// 将字符串转化成long型
long time = Long.parseLong(value);
// 转换成时间
Date date = new Date(time);
// 转换时间的格式(格式化时间)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyy:MM:dd HH:mm:ss");
// 格式化date对象
String lastTime = dateFormat.format(date);
// 写到网页上
response.getWriter().write("上一次的登录时间:" + lastTime);
}
}
}
// 创建cookie对象
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
// 设置cookie的保存路径
// "/" 表示该工程下的所有servlet都能访问
// 保存时 相当于 按工程名来存
// "/SH-web-004/servlet"
// 相当于之后 servlet目录下的网页能访问
cookie.setPath("/SH-web-004/servlet");
// 设置cookie的存活时间
cookie.setMaxAge(60 * 5);
// 添加cookie到响应中
response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}