会话跟踪技术

1.会话概念

  客户端与服务器的会话:

一次会话包含n次请求

客户端与服务器的会话开始: 客户端打开浏览器访问服务器

会话结束: 客户端关闭浏览器

2.会话跟踪技术

        在一个会话的多个请求中共享数据,这就是会话跟踪技术

同一个客户端, 同一次会话的跨请求的数据共享

数据存储载体:

  • 基于Cookie方式(存在客户端浏览器上)

  • 基于HttpSession方式(依赖Cookie)

3.Cookie

Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点, cookie 一个key/value对

Cookie特征:

  1. 产生与服务器

  2. 保存与客户端浏览器上

其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

 3.1 cookie的创建

通过Response方法

@WebServlet(name = "AServlet",value = "AServlet")
public class AServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie对象
        Cookie cookie = new Cookie("name","value");
        //把Cookie保存到客户端浏览器上
        response.addCookie(cookie);
    }
}
 3.2 获取cookie

在同一次会话中, 在其他请求获取Cookie(服务器)

通过Request对象的Cookie[] getCookies()获取带回到服务器的所有Cookie

@WebServlet(name = "AServlet", value = "AServlet")
public class AServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过Request对象的getCookies()方法
        Cookie[] cookies = request.getCookies();

        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                //通过Cookie的名字来筛选
                if (cookie.getName().equals("name")) {
                    System.out.println("name:" + cookie.getName() + ",value:" + cookie.getValue());
                }
            }
        }
    }
}

 3.3 cookie的规范
  • Cookie大小上限为4KB;

  • 一个服务器最多在客户端浏览器上保存20个Cookie;

  • 一个浏览器最多保存300个Cookie;

浏览器厂家对cookie有一定扩展,

注意,不同浏览器之间是不共享Cookie的。也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的Cookie发送给服务器。

注意: cookie尽量不要存储中文, 如果存储中文, 需要把中文转码 URLEncoding

 3.4 cookie的修改与覆盖

浏览器缓存, 清除缓存, ctrl + F5 底层刷新

如果cookie的key存在, 覆盖value

 3.5 cookie的最大存活时间

Cookie在客户端浏览器最大存活时间, 只要时间一到, (max-age=0),浏览器自动删除max-age为0的cookie

max-age: -1 : cookie的默认max-age的值, 表示这个cookie会话级别, 当浏览器关闭的时候, 浏览器把max-age=-1的cookie全部删除

max-age: >0 表示cookie最大存活时间(秒), setMaxAge(60), 表示cookie最大存活60秒, 60秒一过, 浏览器把该Cookie删除

max-age: 0 表示立即删除cookie

 3.6 cookie的路径

可以通过设置Cookie的path来指定浏览器,在访问什么样的路径时,包含什么样的Cookie。

添加cookie的时候, 可以设置Cookie的path: setPath()

如果cookie没有设置path, 这个cookie的path默认为创建cookie资源的url的前缀路径

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值