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机制的区别 ********************************************************** ...
随机推荐
- SlickGrid example 8:折线图
根据数据生成折线图,使用相当简单,也很容易. 主要方法: 数据: var vals = [12,32,5,67,5,43,76,32,5]; 生成折线图: $("testid&quo ...
- c#之线程随机
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- table 单线条
<style> .a{ cursor:pointer; color: blue; text-decorati ...
- Pupu(快速幂取模)
Pupu Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- JAVA基础知识之IO——IO流(Stream)的概念
Java IO 流 Java将不同的设备或载体(键盘.文件.网络.管道等)的输入输出数据统称为"流"(Stream),即JAVA的IO都是基于流的. JAVA传统的所有流类型类都包 ...
- Reading package lists... Error! 解决方案
ubuntu 下安装python开发包,执行命令 sudo apt-get install python-dev,报错: Reading package lists... Error! E: Enco ...
- hdu Interesting Fibonacci
Interesting Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- fzu 2171 防守阵地 II
Problem 2171 防守阵地 II Accept: 31 Submit: 112Time Limit: 3000 mSec Memory Limit : 32768 KB Prob ...
- MUI 授权
步骤1.打开 manifest.json 视图 在permissions 下添加 "Payment": {"description": "支付&q ...
- BZOJ 2758 Blinker的噩梦(扫描线+熟练剖分+树状数组)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2758 题意:平面上有n个多边形(凸包和圆).任意两个多边形AB只有两种关系:(1) ...