JavaWeb 8 Cookie
JavaWeb 8 Cookie
2. 会话管理入门
2.1 生活中会话
我: 小张,你会跳小苹果码?
小张: 会,怎么了?
我: 公司年会上要表演节目,你教教我把
小张:没问题,一顿饭而已。
我: OK。
。。。。。。。。
在这次生活中的会话中产生通话记录(会话数据)
2.2 软件中的会话
一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器
登录场景:
打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页(显示用户名)
修改密码(输入原密码)
修改收货地址
.......
问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢?
购物场景:
打开浏览器 -> 浏览商品列表 -> 加入购物车(把商品信息保存下来) -> 关闭浏览器
打开浏览器-> 直接进入购物车 -> 查看到上次加入购物车的商品 -> 下订单 -> 支付
问题: 在购物会话过程中,如何保存商品信息??
会话管理: 管理浏览器客户端 和 服务器端之间会话过程中产生的会话数据。
域对象: 实现资源之间的数据共享。
request域对象
context域对象
登录场景:
小张: 输入“张三” (保存数据: context.setAttribute("name","张三")) -> 用户主页(显示“张三”)
小李: 输入“李四”(保存数据:context.setAttribute("name","李四")) -> 用户主页(显示“李四”)
问题: context是所有用户公有的资源!!!会覆盖数据。
小张: 输入“张三”(保存数据: request.setAttribute("name","张三"))- > 用户主页(显示“张三”)
问题: 一定要使用转发技术来跳转页面!!!
解决办法: 可以使用session域对象来保存会话数据!!!
2.3 会话技术
Cookie技术:会话数据保存在浏览器客户端。
Session技术:会话数据保存在服务器端。
3 Cookie技术
3.1 特点
Cookie技术:会话数据保存在浏览器客户端。
3.2 Cookie技术核心
Cookie类:用于存储会话数据
1)构造Cookie对象
Cookie( String name, String value)
2)设置cookie
void setPath( String uri) :设置cookie的有效访问路径
void setMaxAge(int expiry) : 设置cookie的有效时间
void setValue( String newValue) :设置cookie的值
3)发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
4)服务器接收cookie
Cookie[] request.getCookies() : 接收cookie
Code
package com.example.cookie; 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; //http://localhost:8080/Cookie/CookieDemo1 public class CookieDemo1 extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.创建Cookie对象 Cookie cookie1 = new Cookie("name","eric"); //Cookie cookie2 = new Cookie("email","jacky@qq.com"); //Cookie cookie1 = new Cookie("email","eric@qq.com"); /** * 1)设置cookie的有效路径。默认情况:有效路径在当前web应用下。 /day11 */ //cookie1.setPath("/day11"); //cookie2.setPath("/day12"); /** * 2)设置cookie的有效时间 * 正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。 负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!! 零:表示删除同名的cookie数据 */ //cookie1.setMaxAge(20); //20秒,从最后不调用cookie开始计算 cookie1.setMaxAge(-1); //cookie保存在浏览器内存(会话cookie) //cookie1.setMaxAge(0); //2.把cookie数据发送到浏览器(通过响应头发送: set-cookie名称) //response.setHeader("set-cookie", cookie.getName()+"="+cookie.getValue()+",email=eric@qq.com"); //推荐使用这种方法,避免手动发送cookie信息 response.addCookie(cookie1); //response.addCookie(cookie2); //response.addCookie(cookie1); //3.接收浏览器发送的cookie信息 /*String name = request.getHeader("cookie"); System.out.println(name);*/ Cookie[] cookies = request.getCookies(); //注意:判断null,否则空指针 if(cookies!=null){ //遍历 for(Cookie c:cookies){ String name = c.getName(); String value = c.getValue(); System.out.println(name+"="+value); } }else{ System.out.println("没有接收cookie数据"); } } }
3.3 Cookie原理
1)服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
2) 服务器发送cookie信息到浏览器
response.addCookie(cookie);
举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
3)浏览器得到服务器发送的cookie,然后保存在浏览器端。
4)浏览器在下次访问服务器时,会带着cookie信息
举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
5)服务器接收到浏览器带来的cookie信息
request.getCookies();
3.4 Cookie的细节
1)void setPath( String uri)
设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,
那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
2)void setMaxAge(int expiry) : 设置cookie的有效时间。
正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
零:表示删除同名的cookie数据
3)Cookie数据类型只能保存非中文字符串类型的。
可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,
每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
Code 删除Cookie
//http://localhost:8080/Cookie/DeleteCookie public class DeleteCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 需求: 删除cookie */ Cookie cookie = new Cookie("name", "xxxx"); cookie.setMaxAge(0);// 删除同名的cookie response.addCookie(cookie); System.out.println("删除成功"); } }
3.5 案例- 显示用户上次访问的时间
//用户上次访问时间 http://localhost:8080/Cookie/HistServlet public class HistServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); // 获取当前时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String curTime = format.format(new Date()); // 取得cookie Cookie[] cookies = request.getCookies(); String lastTime = null; if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("lastTime")) { // 有lastTime的cookie,已经是第n次访问 lastTime = cookie.getValue();// 上次访问的时间 // 第n次访问 // 1.把上次显示时间显示到浏览器 response.getWriter().write( "欢迎回来,你上次访问的时间为:" + lastTime + ",当前时间为:" + curTime); // 2.更新cookie cookie.setValue(curTime); cookie.setMaxAge(1 * 30 * 24 * 60 * 60); // 3.把更新后的cookie发送到浏览器 response.addCookie(cookie); break; } } } /** * 第一次访问(没有cookie 或 有cookie,但没有名为lastTime的cookie) */ if (cookies == null || lastTime == null) { // 1.显示当前时间到浏览器 response.getWriter().write("你是首次访问本网站,当前时间为:" + curTime); // 2.创建Cookie对象 Cookie cookie = new Cookie("lastTime", curTime); cookie.setMaxAge(1 * 30 * 24 * 60 * 60);// 保存一个月 // 3.把cookie发送到浏览器保存 response.addCookie(cookie); } } }
3.6 案例-查看用户浏览器过的商品
JavaWeb 8 Cookie的更多相关文章
- JavaWeb利用cookie记住账号
JavaWeb利用cookie记住账号. 首先,来看看界面什么样子. 记住账号最普遍的做法,就是在点击登录时,将账号保存到cookie中. 材料准备 <script src="${ct ...
- JavaWeb学习----Cookie实现记住密码的功能
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- javaWeb 使用cookie显示商品浏览记录
package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...
- javaWEB与cookie
Cookie1. Http协议与Cookie(了解) * Cookie是HTTP协议制定的!先由服务器保存Cookie到浏览器,再下次浏览器请求服务器时把上一次请求得到Cookie再归还给服务器 ...
- JavaWeb中Cookie会话管理,理解Http无状态处理机制
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512995108961387015/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...
- JavaWeb基础: Cookie
Cookie相关类: javax.servlet.http.Cookie 用于创建Cookie response 里通过addCookie方法添加Cookie到响应头 request里通过getCoo ...
- javaWeb 使用cookie显示上次访问网站时间
package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...
- javaweb之Cookie篇
Cookie是在浏览器访问某个Web资源时,由Web服务器在Http响应消息头中通过Set-Cookie字段发送给浏览器的一组数据. 一个Cookie只能表示一个信息对,这个信息对有一个信息名(Nam ...
- JavaWeb之Cookie和Session的区别
Cookie和Session的区别 一.cookie机制和session机制的区别 ********************************************************** ...
随机推荐
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- MultiSelectComboBox(一)
1. MultiSelectComboBox.xaml <UserControl x:Class="MultiSelectComboBox.MultiSelectComboBox&qu ...
- WebForm跨页面传值---内置对象
一.Response Response - 响应请求对象 string path = "Default2.aspx": (1)Response.Redirect(path); -- ...
- ContentProvider官方教程(10)<provider>元素及属性介绍
The <provider> Element Like Activity and Service components, a subclass of ContentProvider mus ...
- 【Linux】用less查看日志文件
一般程序部署在Linux环境,查看日志时,一般用less满足大部分的需求. 列举.记录最常用的场景,代码以Tomcat日志文件catalna.out为例. > 直接查看文件 less catal ...
- easyui DataGrid 的 Checkbox 选择多行
这么一来在取得 DataGrid 的 Checkbox 有勾选的数据值就可以沿用方式一的程序, 1.$('#ButonGetCheck').click(function(){ 2.var checke ...
- 动手动脑final
1.回答问题 1. 下边的程序运行结果是什么? 2. 你如何解释会得到这样的输出? 3. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪 ...
- 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
package b; public interface ZuoBiao { double zuobiao(); } package b; public class Point implements Z ...
- HCE基础知识
HCE基础知识普及 http://www.cebnet.com.cn2014-09-18 10:32来源:中钞研究院 字号: NFC技术发展 NFC(Near Field Communicat ...
- CodeForces 451C Predict Outcome of the Game
Predict Outcome of the Game Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d &a ...