【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 技术和正则表达式对注册中的用户名.密码.确认密码.邮箱进行格式 ...
随机推荐
- css之div中纯文字单行和多行垂直居中
先上效果图 <html lang="en"> <head> <meta charset="UTF-8"> <meta ...
- Python术语对照表
>>> 交互式终端中默认的 Python 提示符.往往会显示于能以交互方式在解释器里执行的样例代码之前. ... 可以是指:交互式终端中输入特殊代码行时默认的 Python 提示符, ...
- C#获取引用组件的版本信息
/// <summary> /// 当前目录下文件版本 /// </summary> public void FilesVersion ...
- 人社部新职业,Panda Global发现区块链新职业榜上有名!
近日,为了助力新冠肺炎疫情的防控,扎实做好"六稳"工作,全面落实"六保"任务,促就业拓岗位,人力资源社会保障部联合市场监管总局.国家统计局近日正式向社会发布一批 ...
- AH/HNOI 2017 礼物
题目链接 描述 两个序列 \(x, y\),可以将一个序列每个值同时加非负整数 \(c\),其中一个序列可以循环移位,要求最小化: \[\sum_{i = 1}^{n}(x_i - y_i) ^ 2 ...
- WPS PDF转Word工具
WPS PDF转Word工具链接:https://pan.baidu.com/s/1Ijh5MSBWZtsXsm05_6yYvw 提取码:gufy 下载运行后会解压到"D:\Program ...
- MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?
概述 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持.最常使用的MYISAM与INNODB都支持表级锁定.表级锁定分为表共享 ...
- 面试 11-00.JavaScript高级面试
11-00.JavaScript高级面试 #前言 一.基础知识: ES 6常用语法:class .module.Promise等 原型高级应用:结合 jQuery 和 zepto 源码 异步全面讲解: ...
- js下 Day08、DOM案例
一.摇一摇 效果图:
- js下 Day03、DOM操作--节点方法
语法:parentNode.appendChild(child) 功能:向父节点的子节点列表的末尾添加新的子节点 语法:parentNode.removeChild(child) 功能:从子节点列表中 ...