【JavaWeb】Cookie&Session
Cookie&Session
Cookie
什么是 Cookie
- Cookie 即饼干的意思
- Cookie 是服务器通知客户端保存键值对的一种技术
- 客户端有了 Cookie 后,每次请求都发送给服务器
- 每个 Cookie 的大小不能超过 4kb
创建 Cookie
- 客户端(浏览器):
- 如果没有 Cookie,则通知服务器
- 收到响应后,发现有 响应头
Set-Cookie,就去看一下,有没有这个 Cookie,无则创建,有则修改
- 服务器(Tomcat):
- 创建 Cookie 对象
- 通知客户端保存 Cookie
- 通过 响应头
Set-Cookie(Set-Cookie: key1=value1)通知客户端保存 Cookie
// 创建 Cookie
protected void createCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 创建 Cookie 对象
Cookie cookie = new Cookie("key1", "value1");
// 2. 通知客户端保存 Cookie
response.addCookie(cookie);
// 1. 创建 Cookie 对象
Cookie cookie2 = new Cookie("key2", "value2");
// 2. 通知客户端保存 Cookie
response.addCookie(cookie2);
response.getWriter().write("Cookie 创建成功");
}
服务器如何获取 Cookie
- 客户端(浏览器):
- 如果有了 Cookie,通过 请求头
Cookie: xx=xx把 Cookie 信息发送给服务器
- 如果有了 Cookie,通过 请求头
- 服务器(Tomcat):获取客户端发送过来的 Cookie
// 获取 Cookie
protected void getCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取客户端发送过来的 Cookie
Cookie[] cookies = request.getCookies();
response.getWriter().write("Cookie 获取成功");
for (Cookie cookie : cookies) {
response.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] <br/>");
}
Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);
if (iWantCookie != null) {
response.getWriter().write("找到了需要的 key1 Cookie: " + iWantCookie.getValue());
}
}
Cookie 值的修改
// 修改 Cookie
protected void updateCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 方案一:
//1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
//2、在构造器,同时赋于新的 Cookie 值
Cookie newCookie = new Cookie("key1", "new-value1");
//3、调用 response.addCookie( Cookie ) 通知客户端保存修改
response.addCookie(newCookie);
// 方案二:
//1、先查找到需要修改的 Cookie 对象
Cookie newCookie2 = CookieUtils.findCookie("key2", request.getCookies());
//2、调用 setValue()方法赋于新的 Cookie 值
if (newCookie2 != null) {
newCookie2.setValue("new-value2");
}
//3、调用 response.addCookie( Cookie ) 通知客户端保存修改
response.addCookie(newCookie2);
response.getWriter().write("Cookie 修改成功");
}
Cookie 生命周期
Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)。
setMaxAge(maxAge):
- 正数,表示在指定的秒数后过期
- 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1),这是默认值
- 零,表示马上删除 Cookie
// Cookie 存活 120s。
protected void life120Cookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("life120Cookie", "life120Cookie");
cookie.setMaxAge(60 * 2);
response.addCookie(cookie);
response.getWriter().write("已经创建了一个存活二分钟的 life120Cookie");
}
// Cookie 存活 0s,即删除。
protected void deleteCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = CookieUtils.findCookie("defaultCookie", request.getCookies()) ;
if (cookie != null) {
cookie.setMaxAge(0);
response.addCookie(cookie);
response.getWriter().write("defaultCookie 已经被删除了");
}
}
// Cookie 默认的会话级别 session。
protected void defaultCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("defaultCookie", "defaultCookie");
cookie.setMaxAge(-1);
response.addCookie(cookie);
response.getWriter().write("已经创建了一个默认的 defaultCookie");
}
Cookie 有效路径 Path 的设置
Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器,哪些不发。path 属性是通过请求的地址来进行有效的过滤。
// 路径设置
protected void setPath(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("path1", "path1");
cookie.setPath(request.getContextPath() + "AA"); // 得到工程路径
response.addCookie(cookie);
response.getWriter().write("创建了一个带有 Path 路径的 Cookie");
}
免输入用户名登录
<%--
Created by IntelliJ IDEA.
User: parzulpan
Date: 2020/12/12
Time: 5:47 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>免输入用户名登录</title>
</head>
<body>
<form action="cookieServlet" method="get">
<input type="hidden" name="action" value="loginWithCookie"/>
用户名:<input type="text" name="username" value="${cookie.username.value}"> <br>
密码:<input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
// 免输入用户名登录
protected void loginWithCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("parzulpan".equals(username) && "123456".equals(password)) {
// 登录成功
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(60 * 60 * 24 * 7); // 当前 Cookie 一周内有效
response.addCookie(cookie);
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}
}
Session
什么是 Session 会话
- Session 就是一个接口(HttpSession)
- Session 就是会话,它是用来维护一个客户端和服务器之间关联的一种技术
- 每个客户端都有自己的一个 Session 会话
- Session 会话中,经常用来保存用户登录之后的信息
创建和获取 Session
- request.getSession() 第一次调用是创建 Session 会话,之后调用都是获取前面创建好的 Session 会话对象
- isNew() 判断是不是新的 Session,true 表示刚创建,false 表示获取之前创建
- getId() 得到 Session 的会话 ID 值,每个会话都有一个唯一的 ID 值
// 创建和获取 Session
protected void createOrGetSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
boolean isNew = session.isNew();
String id = session.getId();
response.getWriter().write("得到的 Session 的 Id 是:" + id + "<br>");
response.getWriter().write("这个 Session 是否是新创建的:" + isNew + "<br>");
}
// 向 Session 中保存数据
protected void setAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("key1", "value1");
response.getWriter().write("已经往 Session 中保存了数据");
}
// 获取 Session 域中的数据
protected void getAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object key1 = request.getSession().getAttribute("key1");
response.getWriter().write("从 Session 中获取出 key1 的数据是:" + key1);
}
Session 生命周期
public void setMaxInactiveInterval(int interval)设置 Session 的超时时间(以秒为单位),超过指定的时长 Session 就会被销毁。值为正数的时候,设定 Session 的超时时长。负数表示永不超时(极少使用)public int getMaxInactiveInterval()获取当前 Session 的超时时间public void invalidate()让当前 Session 会话马上超时无效
Session 默认的超时时间长为 30 分钟。因为在 Tomcat 服务器的配置文件 web.xml中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session 超时配置默认时长为:30 分钟。
Session 超时指的是客户端两次请求的最大时间间隔时长。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
如果说希望你的 web 工程,默认的 Session 的超时时长为其他时长,可以在你自己的 web.xml 配置文件中做以上相同的配置。
<!--表示当前 web 工程。创建出来 的所有 Session 默认是 20 分钟 超时时长-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
// Session 默认超时,默认超时时长为 30 分钟,可以通过 Tomcat 的 web.xml 配置更改
protected void defaultSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int maxInactiveInterval = request.getSession().getMaxInactiveInterval();
response.getWriter().write("Session 默认超时时长:" + maxInactiveInterval);
}
// Session 10s 后超时
protected void life10Session(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setMaxInactiveInterval(10);
response.getWriter().write("当前 Session 已经设置为 10 秒后超时");
}
// Session 马上超时
protected void deleteSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 先获取 Session 对象
HttpSession session = request.getSession();
// 让 Session 会话马上超时
session.invalidate();
response.getWriter().write("Session 已经设置为超时(无效)");
}
浏览器和 Session
Session 技术,底层其实是基于 Cookie 技术来实现的。

【JavaWeb】Cookie&Session的更多相关文章
- 【转】Cookie/Session机制详解
Cookie/Session机制详解 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...
- 【JavaWeb】 Cookie和Session
Session和Cookie出现的原因: 由于Http是无状态的协议,会话之间没有任何关联,也就是上一次会话和下一次会话没有任何关联,因此出现了会话技术Cookie和Session 下面分别从Cook ...
- 【Javaweb】Cookie和Session
会话技术 什么是会话 从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止的这段时间内容产生的多次请求和响应,合起来叫做浏览器和服务器之间的一次会话 会话管理作用 共享数据用的,并且是在不同请求间 ...
- 【转载】Cookie/Session机制详解
[本文转自]http://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话. ...
- 【转】UniGUI Session管理說明
[转]UniGUI Session管理說明 (2015-12-29 15:41:15) 转载▼ 分类: uniGUI 台中cmj朋友在uniGUI中文社区QQ群里发布的,转贴至此. UniGUI ...
- 【python爬虫】cookie & session
一.什么是cookie? cookie是指网站为了鉴别用户身份,进行会话跟踪而存储在客户端本地的数据. 二.什么是session? 本来的含义是指有始有终的一些列动作,而在web中,session对象 ...
- 【转】接口测试Session/Cookie笔记(二)
Windows系统运行计算器命令:calc python显示上一步操作命令:Alt+p python显示上一步操作结果:_(英文下划线) Session是存放在服务器的键值对 ,用于保存客户端的某个特 ...
- JavaWeb之Cookie&Session
Cookie 直译是:小饼干.实际上,Cookie就是由服务器给客户端,并且存储在客户端上的一份小数据 应用场景 自动登录,查看浏览记录,购物车 Cookie存在的意义 HTTP请求是无状态的,客户端 ...
- 【JavaWeb】书城项目
书城网站 项目说明 项目地址 阶段一 登录.注册的验证 使用 jQuery 技术对登录中的用户名.密码进行非空验证: 使用 jQuery 技术和正则表达式对注册中的用户名.密码.确认密码.邮箱进行格式 ...
随机推荐
- 笔记-[APIO2010]特别行动队
笔记-[APIO2010]特别行动队 [APIO2010]特别行动队 \(f_i\) 表示将 \((j+1,j+2,\dots,i)\) 分为一组,已解决 \(i\) 之前的士兵的最小代价. \(a& ...
- 三、Zookeeper简介
一.简介 zookeeper 主要使用场景:分布式系统的分布式协同服务.协同工作就是通过某种方式,让着节点的信息能够同步和共享,依赖于进程间的通信.通信方式有俩种. 通过网络进行信息共享 现实工作中, ...
- Centos7网卡绑定的方法
温和的方式请参考:https://www.cnblogs.com/zzf0305/p/9594093.html 一:传统的bond方式(饭已验证)------------本种的绑定方式比较暴躁 (1) ...
- centos7 mysql 自动补全
1 yum -y install epel-release #配置erel源 2 yum -y install python-pip 3 pip install mycli #用pip安装 可能会出现 ...
- python写几个排序算法
def maopao(data: list): """ 两两比较 :param data: :return: """ length = le ...
- Echarts入门教程精简实用系列
引语:echarts.js是百度团队推出的一款用于图表可视化的插件,用于以图表的形式展现数据,功能强大,上手简单 1.从官方网站中下载所需的echarts.js文件,该文件因功能广泛,包体较大,可自行 ...
- 有了Git这个功能,再也不需要依赖IDE了!
大家好,今天给大家介绍一个隐藏的功能--搜索. 我们在写代码的时候经常遇到的一种情况就是,我们想要知道某一个函数是怎么定义的,这样我们才能知道该如何调用它.如果代码少的话我们当然可以自己人肉查找,但是 ...
- js上 十四、对象
十四.对象 #1.初识对象 什么是对象? 在js中,一切皆是对象. 对象,生活中可见和不可见的东西,在世界中,客观存在的都是一个对象. 桌子,笔记本,手机,人. 在日常生活中,我们是如何来描述这个对象 ...
- 记一次 oracle 数据库在宕机后的恢复
系统:redhat 6.6 oracle版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production 问题描述: ...
- Maven史上最全的pom.xml详解
下面主要是借鉴 官网的资料 收集而来 主要是为了讲解,用到的很少,但是还是需要了解 ,重点是方便查验资料 <project xmlns="http://maven.apache.org ...