Cookie API和记录上次来访时间
1.什么是Cookie?
Cookie是一种会话技术,用千将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。
在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录用户的个人信息(姓名,手机号等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。
在Web应用中,Cookie的功能类似千这张会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。
2.Cookie发送方式
服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。
Set-Cookie头字段中设置的Cookie遵循一定的语法格式,具体示例如下:
Set-Cookie:user = aaaa; Path=/;
在上述示例中,user表示Cookie的名称,itcast表示Cookie的值,Path表示Cookie的属性。需要注意的是,Cookie必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号;和空格分隔。
3.Cookie传输过程
当用户第一次访问服务器时,服务器会在响应消息中增加Set-Cookie头字段,将 用户信息以Cookie的形式发送给浏览器。
一旦用户浏览器接受了服务器发送的Cookie信息,就会将它保存在浏览器的缓冲 区中
当浏览器后续访问该服务器时,都会在请求消息中将用户信息以Cookie的形式发 送给Web服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。
4.Cookie API
为了封装Cookie信息,在ServletAPI中提供了一个javax.servlet.http.Cookie类,该类包含了生成Cookie信息和提取Cookie信息各个属性的方法:
4.1.构造方法
- Cookie类有且仅有一个构造方法,具体语法格式如下:
- 在Cookie的构造方法中,参数name用千指定Cookie的名称,value用千指定Cookie的值。
- 需要注意的是,Cookie一旦创建,它的名称就不能更改,他的值可为任何值,创建后允许被修改。
4.2Cookie常用方法
通过Cookie的构造方法创建Cookie对象后,便可调用该类的所有方法
表中列举了Cookie类的常用方法,由千大多数方法 都比较简单,对表中比较难以理解的方法进行介绍:
1)setMaxAge(int expiry)和getMaxAge()方法
- 这两个方法用千设置和返回Cookie在浏览器上保持有效的秒数。
- 如果设置的值为一个正整数时,浏览器会将Cookie信息保存在本地硬盘中。从当前时间开始,在没有超过指定的秒数之前,这个Cookie都保持有效,并且同一台计算机上运行的该浏览器都可以使用这个Cookie信息。
- 如果设置值为负整数时,浏览器会将Cookie信息保存在的缓存中, 当浏览器关闭时,Cookie信息会被删除。
- 如果设置值为0时,则表示通知浏览器立即删除这个Cookie信息。默认情况下,Max-Age属性的值是-1。
2)setPath(String uri)和getPath()方法
- 这两个方法是针对Cookie的Path属性的。
- 如果创建的某个Cookie对象没有设置Path属性,那么该Cookie 只对当前访问路径所属的目录及其子目录有效。
- 如果想让某个Cookie项对站点的所有目录下的访问路径都有效, 应调用Cookie对象的setPath()方法将其Path属性设置为“/”。
3)setDomain(String pattern)和getDomain()方法
- 这两个方法是针对Cookie的domain属性的。domain属性是用来指定浏览器访问的域。
- 例如,域为“hbxy.com”。那么,当设置domain属性时,其值必须以“.”开头,如domain=.hbxy.com。
- 默认情况下,domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息回送给服务器。需要注意的是,domain属性的值是不区分大小写的。
上代码!
1.创建类
package com.hbxy.web.c03.cookie;
import javax.servlet.ServletException;
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.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置服务器输出内容的编码格式为UTF-8防止乱码
response.setContentType("text/html;charset=utf-8");
String lastAccessTime = null;
// 获取所有的cookie并将这些cookie存放到数组中
Cookie[] cookies = request.getCookies();
// 遍历cookies数组
for (int i = 0; cookies != null && i < cookies.length; i++) {
if ("lastAccess".equals(cookies[i].getName())) {
// 如果cookie名称为lastAccess,则获取该cookie的值
lastAccessTime = cookies[i].getValue();
break;
}
}
// 盘算是否存在名称为lastAccess的cookie
if (lastAccessTime == null) {
response.getWriter().print("你首次访问本网站!");
} else {
response.getWriter().print("你上次访问本网站的时间是: "
+ URLDecoder.decode(lastAccessTime, "UTF-8"));
}
// 创建cookie,将当前时间作为cookie的值发送给客户端
String currentTime = new SimpleDateFormat("yyyy- MM-dd hh:mm:ss")
.format(new Date());
Cookie cookie = new Cookie("lastAccess",
URLEncoder.encode(currentTime, "UTF-8"));
//cookie.setMaxAge(60*60); //设置cookie最大存在时间
//发送cookie
response.addCookie(cookie);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
}
2.配置web.xml
<servlet>
<servlet-name>CookieServlet</servlet-name>
<servlet-class>com.hbxy.web.c03.cookie.CookieServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieServlet</servlet-name>
<url-pattern>/CookieServlet</url-pattern>
</servlet-mapping>
3.测试
Cookie API和记录上次来访时间的更多相关文章
- 使用Cookie实现显示用户上次访问时间
一. 常用Cookie API介绍 1. 获取cookie request.getCookies(); // 返回Cookie[] 2. 创建cookie Cookie(String key, St ...
- Servlet—Cookie(显示用户上次访问时间、显示商品浏览历史)
1 . 什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 1.1 会话过程中要解决的一些问题? 每个用户在使用浏览器 ...
- JavaWeb案例:上次访问时间 Cookie技术
package cn.itcast.access; import javax.servlet.ServletException; import javax.servlet.annotation.Web ...
- Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
Cooike简介 Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的 ...
- 借助Cookie实现是否第一次登陆/显示上次登陆时间
Cookie实现是否第一次登陆/显示上次登陆时间 最近刚好看到Cookie这方面知识,对Servlet部分知识已经生疏,重新翻出已经遗弃角落的<JavaWeb开发实战经典>,重新温习了Co ...
- Cookie实现是否第一次登陆/显示上次登陆时间
Cookie实现是否第一次登陆/显示上次登陆时间 最近刚好看到Cookie这方面知识,对Servlet部分知识已经生疏,重新翻出已经遗弃角落的<JavaWeb开发实战经典>,重新温习了Co ...
- Cookie实现--用户上次访问时间
用户上次访问时间
- Servlet案例6:显示用户的上次访问时间
这里是cookie的简单应用 告诉用户您的上次访问时间是:xxxx-xx-xx xx:xx:xx 思路: 第一次访问该网站时候,记录当前访问时间(new Date()) 把当前时间以cookie的形式 ...
- web API简介(二):客户端储存之document.cookie API
概述 前篇:web API简介(一):API,Ajax和Fetch 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据.document.cook ...
随机推荐
- 03.Delphi通过接口实现多重继承的优化
在上一篇02中,写到的sayhello函数,需要使用2个接口参数,很繁琐.可以使用as参数,把多重继承的子类对象变成需要的对象 uSayHello代码如下 unit uSayHello; interf ...
- CSS:导航栏下拉菜单模板
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- UVA 12510/CSU 1119 Collecting Coins DFS
前年的省赛题,难点在于这个石头的推移不太好处理 后来还是看了阳神当年的省赛总结,发现这个石头这里,因为就四五个子,就暴力dfs处理即可.先把石头当做普通障碍,进行一遍全图的dfs或者bfs,找到可以找 ...
- 利用ZXing.Net生成和识别二维码
ZXing.Net:ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库. github:https://github.com/micjahn/ZXing.Net 直接将字符 ...
- 关于js中异步问题的解决方案
在js中有一个始终无法绕过的问题,如何优雅地解决异步问题.实际上,js在执行过程中,每遇到一个异步函数,都会将这个异步函数放入一个异步队列中,只有当同步线程执行结束之后,才会开始执行异步队列中的函数, ...
- 【LeetCode】226. 翻转二叉树
题目 翻转一棵二叉树. 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 本题同[剑指Offer]面试题27. 二叉树的镜 ...
- Golang的运算符-位运算符
Golang的运算符-位运算符 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.位运算符概述 常见的位逻辑运算符: &: 位与运算符,表示AND(表示所有条件都得匹配), ...
- java核心-多线程(1)-知识大纲
Thread,整理一份多线程知识大纲,大写意 1.概念介绍 线程 进程 并发 2.基础知识介绍 Java线程类 Thread 静态方法&实例方法 Runnable Callable Futur ...
- 021-PHP常用的数值类型判断函数
<?php //判断数组 $colors = array("red", "blue", "green"); if(is_array($ ...
- 1. Centos 安装
安装 Centos 6.9 配置网络 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes ...