Cookie【会话控制】

Cookie

1.为什么使用Cookie

1.1会话控制

  • 流程控制:控制程序的执行流程。【程序正常从上至下,从左到右第的执行流程。if&for】
  • 会话控制:控制浏览器与服务器之间的会话。【与浏览器有关,只要不关闭,不更换浏览器时,即为当前会话】

1.2 Http协议【无状态】

Http是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。因此可以认为,服务器无法区分不同的用户【浏览器】,此时就需要Cookie【session】来区分不同的用户。

2.Cookie的简介

2.1.Cookie由来:小饼干,【程序员买饼干的故事】

2.2Cookie具体是什么?

Cookie实际上是服务器上保存的浏览器上的一小段信息,目的:区分不同的浏览器【即:用户】。其就是一种【服务器以键值对存储少量信息的方式通知浏览器的】技术。

3.Cookie的工作原理

  • 1.浏览器向服务器发送请求【程序员带着小女儿去饼干店买饼干】
  • 2.服务器创建Cookie对象(卡片),该Cookie对象会携带用户信息,最终服务器会将Cookie对象发送给浏览器。【饼干店搞活动,饼干店制作卡片,并在卡片上盖章,最终将卡片发送给程序员】
  • 3.以后浏览器再次请求服务器时,会携带Cookie对象。【程序员再次来店买饼干时,会携带卡片】
  • 4.服务器通过该Cookie对象,区分不同的浏览器(用户)。【饼干店会通过不同的卡片,区分不同的用户】

4.Cookie的基本使用

4.1Cookie的创建

//创建Cookie对象,并将信息保存到Cookie。
Cookie cookie = new Cookie("level","level2");
//将Cookie对象,响应给浏览器
response.addCookie(cookie);

4.2Cookie的获取

//获取Cookie信息
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    System.out.print("cookieName = " + cookie.getName());
    System.out.println("cookieValue = " + cookie.getValue());
}

4.3Cookie的修改

//查找指定Cookie对象,进行修改
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    if("level".equals(cookie.getName())){
        //将Cookie的value更改为“level3”
        cookie.setValue("level3");
        //将Cookie对象响应浏览器
        response.addCookie(cookie);
        break;
    }
}
//创建同名Cookie对象,响应给浏览器,实现Cookie覆盖式修改。[推荐使用]
Cookie cookie = new Cookie("level","level4");
//将Cookie对象响应浏览器
response.addCookie(cookie);

4.4Cookie的键值问题

Cookie的语法规定:Cookie的name不能使用中文,Cookie的value可以使用中文,但需要设置底层字符集问题,相对比较繁琐。所以建议使用英文,不推荐使用中文。

//浏览器获取服务器Cookie:解码
URLDecoder.decode(cookie.getValue(),"UTF-8")
//服务器响应浏览器Cookie:编码
URLEncoder.encode("等级4","UTF-8")

5.Cookie有效性&持久化Cookie【重点】

5.1Cookie的有效时间

  • 默认情况:Cookie的有效时间为【会话级别】,当前会话有效。【与浏览器一一对应,只要不关闭,不更换浏览器,会话始终有效】
  • 持久化Cookie【如持久化Cookie后,默认会话级别失败】
    –使用场景:如需要关闭浏览器后,依然需要Cookie有效,此时需要持久化Cookie
    –示例代码:cookie.setMaxAge(ss:秒,intl类型);设置Cookie的有效(存活)时间
    —ss>0:在ss秒后Cookie失效。(与浏览器无关)
    —ss=0:立即失效
    —ss<0:回复默认的会话级别
  • Cookie默认不能在不同的浏览器之间共享

5.2Cookie有效路径

  • 默认情况:Cookie的默认有效路径为:当前项目下有效,如:http://localhost:8080/day13_cookie_session
  • 设置Cookie的有效路径:cookie.setPath()
    –一般设置Cookie的有效路径时,都会设置到当前项目下的某个路径。如:
<http://localhost:8080/day13_cookie_session/cookie_demo.jsp>

代码:cookie.setPath(request.getContextPath+"/xxxURL");

6.Cookie的应用

  • 需求:当用户登录成功后,且勾选“7天免输入”复选框后,在7天内可以实现“免输入”效果。
  • 代码:
<h2>7天免输入功能-login</h2>
<%--unCookie:${cookie.username.value}--%>
<form action="LoginServlet?method=login" method="post">
    用户名:<input type="text" name="username" value="${cookie.username.value}"><br>
    密码:<input type="password" name="pwd" value="${cookie.pwd.value}"><br>
    7天免输入:<input type="checkbox" name="cb"><br>
    <input type="submit" value="登录">
</form>
//获取用户名&密码请求参数
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
String cb = request.getParameter("cb");
if(cb!=null && cb.length()>0){
    //勾选“7天...”
    //将用户名&密码存放到Cookie中,并持久化7天
    Cookie unCookie = new Cookie("username",username);
    Cookie pwdCookie = new Cookie("pwd",pwd);
    //持久化Cookie7天
    unCookie.setMaxAge(60*60*24*7);
    pwdCookie.setMaxAge(60*60*24*7);
    //响应给浏览器
    response.addCookie(unCookie);
    response.addCookie(pwdCookie);
}

7.Cookie的缺陷

  • 1.Cookie的value是String类型,存储数据时,不方便
  • 2.Cookie由服务器创建。【存储在浏览器,相对不安全】
  • 3.如Cookie过多时,会浪费流量【数据流量,不同的浏览器厂商,对cookie的数量以及大小有不同的限制,一般在(数量:200-500个,大小:2kb左右)】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值