百度网站的结构,新建wordpress模板,微网站建设方案书,样式网站一、会话技术
1.1 概述
会话#xff1a;一次会话中包含多次**请求和响应**
一次会话#xff1a;浏览器第一次给服务器资源发送请求#xff0c;此时会话建立#xff0c;直到有一方断开为止
会话的功能#xff1a;在一次会话的范围内的多次请求间#xff0c;共享数据
…一、会话技术
1.1 概述
会话一次会话中包含多次**请求和响应**
一次会话浏览器第一次给服务器资源发送请求此时会话建立直到有一方断开为止
会话的功能在一次会话的范围内的多次请求间共享数据
会话的方式
客户端会话技术Cookie服务器端会话技术Session
二、Cookie
2.1 概述和快速入门
概述客户端会话技术将数据保存到客户端在B/S架构中即浏览器中
使用步骤
创建 Cookie 对象绑定数据发送 Cookie 对象获取 Cookie 对象拿到数据
方法
方法作用new Cookie(String name , String value)创建 Cookie 对象response.addCookie(Cookie cookie)通过 响应对象 进行发送Cookie[] request.getCookies()通过 请求对象 进行获取
2.2 Cookie 原理
Cookie 的实现原理底层发送数据还是基于 http 协议基于 响应头 set-cookie 和 请求头 cookie 实现 2.3 Cookie 的细节
1、一次可不可以发送多个 Cookie
可以创建多个 Cookie 对象使用 response 响应对象调用多次 addCookie 方法发送 cookie 即可
2、Cookie 在浏览器中保存多长时间 默认情况下当浏览器关闭后Cookie 数据就被销毁 持久化存储设置 Cookie 的生命周期 setMaxAge(int seconds);参数 正数将 Cookie 数据写到硬盘的文件中持久化存储并指定Cookie存活时间时间到后Cookie文件自动失效单位秒负数默认值零删除 Cookie 信息
3、Cookie 能不能存储中文
在 Tomcat 8 之前 Cookie 中不能直接存储中文数据需要将中文数据转码一般采用 URL 编码在 Tomcat 8 之后 Cookie 中支持中文数据特殊字符还是不支持建议使用 URL 编码存储URL 解码解析
4、假设在一个 Tomcat 服务器中部署了多个 web 项目那么在这些 web 项目中 Cookie 能不能共享 默认情况下 Cookie 是不能共享的如果要共享可以将 path 设置为 “/” 设置方法 setPath(String path); // 设置 cookie 的获取范围默认情况下设置当前的虚拟目录5、不同 Tomcat 服务器间 Cookie 共享问题 如果设置一级域名相同那么多个服务器之间 Cookie 可以共享 设置方法 setDomain(String path); // 设置域名示例代码 setDomain(.baidu.com); // 那么 只要是此一级域名下的域名中 Cookie 都能共享2.4 Cookie 的特点和作用
Cookie 存储数据在客户端浏览器中浏览器对于单个 Cookie 的大小有限制4kb以及对同一个域名下、总的Cookie 数量也有限制20个
Cookie 一般用于存储少量的不太敏感的数据在不登录的情况下完成服务器对客户端的身份识别例子我们对某个网站登录后发现下次再来就会有账户
三、案例
3.1 记住上一次访问时间
案例需求
访问一个 Servlet 如果是首次访问则提示“您好欢迎您首次访问”如果不是第一次访问则提示“欢迎回来您上次访问时间为年月日 时分秒”
案例分析
可以采用 Cookie 客户端会话技术来实现在服务器中 Servlet 判断是否有一个名为 lastTime 的 Cookie 对象 有则不是第一次访问 响应数据将 “欢迎回来您上次访问时间为时间” 输出到浏览器上写回 Cookie将 本次访问时间 以 Cookie 对象方式存储到客户端 无则是第一次访问 响应数据将 “您好欢迎您首次访问” 输出到浏览器上写回 Cookie将 本次访问时间 以 Cookie 对象方式存储到客户端
案例过程图 案例代码
import javax.servlet.ServletException;
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;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;/*** Cookie 案例记录上一次时间*/
WebServlet(/servlet1)
public class CookieDemo1 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType(text/html;charsetutf-8);PrintWriter out resp.getWriter();// 获取客户端的所有 CookieCookie[] cookies req.getCookies();boolean isFirstVisit true;String lastVisitTime ;if (cookies ! null) {for (Cookie cookie : cookies) {if (cookie.getName().equals(lastTime)) {isFirstVisit false;// 采用 URL 解码lastVisitTime URLDecoder.decode(cookie.getValue(),utf-8);break;}}}if (isFirstVisit) {out.println(您好欢迎您首次访问);} else {out.println(欢迎回来您上次访问时间为 lastVisitTime);}// 将本次访问时间以 Cookie 对象方式存储到客户端SimpleDateFormat dateFormat new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String currentTime dateFormat.format(new Date());// 采用 URL 编码String encode URLEncoder.encode(currentTime, utf-8);Cookie lastTimeCookie new Cookie(lastTime, encode);resp.addCookie(lastTimeCookie);out.close();}
}