Cookie知多少?
一、什么是cookie?
①:Cookie翻译过来是饼干.
②:Cookie是服务器通知客户端保存键值对的一种技术.
③:每个 Cookie的大小不能超过4kb
④:每次请求的时候,只要客户端有Cookie,都会被发送给服务器.
二、如何创建Cookie?
①:在服务器端new Cookie( name, value ) ;
②:调用 response.addCookie( cookie ); 通知客户端Cookie 保存( 或修改 )
/*** 创建cookie* @param request* @param response*/public void createCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {// 1、创建cookie,只有有参构造Cookie cookie = new Cookie("key","value");
// 2、调用 response.addCookie( cookie ); 通知客户端Cookie 保存( 或修改 )response.addCookie(cookie);Cookie cookie1 = new Cookie("cccKey","cccValue");response.addCookie(cookie1);response.setContentType("text/html;charset=UTF-8");response.getWriter().write("已经创建cookie,并返回");}
三、服务器如何获取客户端发送过来的Cookie?
①:当浏览器向服务器发送请求时,浏览器中有cookie,只要发请求,就会将cookie的相关信息发送给服务器(通过请求头)
②:服务器获取浏览器中传递的cookie,只需要使用api—》request.getCookies():Cookie[] 即可得到全部Cookie
// cookie.getName() 获取Cookie的键或名称 值
// cookie.getValue() 获取当前Cookie的值
/*** 获取创建的cookie信息* @param request* @param response* @throws IOException*/public void getCookies(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");
// 1、获取前台传递的所有cookieCookie[] cookies = request.getCookies();if(cookies != null && cookies.length > 0){for (Cookie cookie:cookies) {// 2、将获取到的cookie具体信息写到页面展示response.getWriter().write(cookie.getName() +":"+ cookie.getValue() + "<br/>");}}// 3、获取具体的cookieCookie cookie = CookieUtils.findCookie("key",cookies);if(cookie != null){System.out.println(cookie.getName());response.getWriter().write("亲爱的.我找到了你要的Cookie <br>");}}
四、cookie值得修改
①:
直接在服务器端创建一个同名的cookie对象,
在创建的构造器方法中直接赋于新值,
调用 response.addCookie( cookie ); 通知客户端保存修改
②:
先查找到需要修改的Cookie对象
调用 setValue() 方法设置新的值
调用 response.addCookie() 通知客户端保存
/*** 修改cookie* @param request* @param response*/public void upCookie(HttpServletRequest request, HttpServletResponse response){/*** 方案一:* 1 直接在服务器端创建一个同名的cookie对象 === 修改aaa值为aaaNewValue* 2 在创建的构造器方法中直接赋于新值*/Cookie cookie = new Cookie("cccKey","cccNewKey");response.setContentType("text/html;charset=UTF-8");response.addCookie(cookie);/*** 方案二:* 1 先查找到需要修改的Cookie对象* 2 调用 setValue() 方法设置新的值* 3 调用 response.addCookie() 通知客户端保存*/Cookie cookie1 = CookieUtils.findCookie("key",request.getCookies());
// 注意:如果Cookie值为中文,建议使用BASE64编码后再保存cookie1.setValue("newValue");response.addCookie(cookie1);}
五、cookie得生命周期
Cookie也是有存活时长的.Cookie的存活时长由一个api设置决定.
setMaxAge()
1 正数 表示浏览器在指定的秒数后被删除 ( 或失效 )
2 负数 表示浏览器关闭,Cookie就会被删除( 默认值也是-1 )
3 零 表示浏览器收到响应后,马上删除Cookie
/*** 设置cookie声明周期* setMaxAge()* 1 正数 表示浏览器在指定的秒数后被删除 ( 或失效 )* 2 负数 表示浏览器关闭,Cookie就会被删除( 默认值也是-1 )* 3 零 表示浏览器收到响应后,马上删除Cookie* @param request* @param response*/public void cookieLife(HttpServletRequest request, HttpServletResponse response) throws IOException {// 1、创建cookieCookie cookie = new Cookie("life3600","life3600");
// 2、设置cookie的存活时间cookie.setMaxAge(60 * 60);response.addCookie(cookie);response.setContentType("text/html;charset=UTF-8");response.getWriter().write("创建一个可以存活一小时的cookie");}
六、Cookie有效路径Path的设置
Cookie的path路径,可以设置Cookie在哪些请求下才发送给服务器.
①:Cookie1 的path为: /工程路径 表示请求地址为: http://ip:port/工程路径/所有资料 都会发送给服务器.
②:cookie2 的path为:/工程路径/abc 表示请求地址为: http://ip:port/工程路径/abc/* 都会发给服器.
示例:
比如现在有两个Cookie
CookieA path=/工程路径
CookieB path/工程路径/abc
请求有以下几个:
http://ip:port/工程路径/a.html
CookieA 会发
CookieB 不发
http://ip:port/工程路径/abc/a.html
CookieA 会发
CookieB 会发
/*** 测试cookie有效路径的设置* @param request* @param response* @throws IOException*/public void testCookiePath(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");Cookie cookieA = new Cookie("cookieAKey","cookieAValue");
// cookieA设置的路径为:/atguigu8_cookieAndsession 其也是默认值cookieA.setPath(request.getContextPath());response.addCookie(cookieA);Cookie cookieB = new Cookie("cookieBKey","cookieBValue");
// cookieB设置的路径为:/atguigu8_cookieAndsession/abccookieB.setPath(request.getContextPath() + "/abc");response.addCookie(cookieB);response.getWriter().write("创建了两个Cookie用于对比");}
}
七、免输入用户名登录—使用cookie完成的功能
免用户名登录指的是,一个表单.当用户第一次访问的时候,是需要登录的.第一次登录成功后.
用户名就会被记录下来.当用户第二次访问的时候,这个表单里就会直接有之前登录的用户名信息,只需要输入密码即可.
/*** 免 用户名登录*/
@WebServlet(name = "UserServlet" ,urlPatterns = "/userServlet")
public class UserServlet extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");String username = req.getParameter("username");String password = req.getParameter("password");if("admin".equals(username) && "admin".equals(password)){Cookie cookie = new Cookie("username",username);
// 设置cookie存活周期为一周cookie.setMaxAge(60 * 60 * 24 * 7);resp.addCookie(cookie);resp.getWriter().write("登录成功");}else {req.getRequestDispatcher("/login.jsp").forward(req,resp);}}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录页面-</title>
</head>
<body><form action="${pageContext.request.contextPath}/userServlet" method="post">用户名:<input type="text" id="username" name="username" value="${cookie.username.value}" /><br>密码:<input type="password" name="password" id="password" /> <br><input type="submit" value="免用户名登录"></form>
</body>
</html>
Cookie知多少?相关推荐
- Python模拟登陆,解密js代码实例:知乎登陆
本文转载自公众号 | 日常学Python 作者 | sergiojune 如果你现在想模拟登陆知乎,会发现 fromdata 是一串加密的字符串 image 看了之后是不是很痛苦?你是不是就想使用 s ...
- 如何搞定知乎模拟登陆的加密难题?
作者 | sergiojune 责编 | 郭芮 声明:以下内容仅交流学习,请勿用于非法用途. 如果你现在想模拟登陆知乎,会发现 fromdata 是一串加密的字符串: 看了之后是不是很痛苦?你是不是就 ...
- HTTP 最强资料大全
HTTP最强资料大全 更新内容:新增视频教程 - WEB系统测试.PHP的HTTP协议.okhttp框架解析与应用.走进Requests库.接口测试基础入门篇.JMeter之HTTP协议接口性能测试: ...
- HTTP最强资料大全
更新内容:新增视频教程 - WEB系统测试.PHP的HTTP协议.okhttp框架解析与应用.走进Requests库.接口测试基础入门篇.JMeter之HTTP协议接口性能测试: 为了方便有兴趣的朋友 ...
- 按键精灵开发者认证1-6题库
这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...
- 利用cookie模拟登陆知乎
我们知道一些网站是需要账号密码才可以登陆的,例如知乎.而利用requests库里的get方法的headers参数可以达到这个目的 首先在知乎的网页上登陆自己的知乎账号,利用chrome的开发者工具(F ...
- 知乎cookies的介绍_使用cookie登陆知乎
只是想说明一个问题,Cookie可以维持登录状态,有些网页当中,访问之后的cookie里面带有登陆账号,和登陆密码,这样可以使用cookie直接访问网页,如知乎,首先登录知乎,将Headers中的Co ...
- python requests cookie保存_Python爬虫教程:爬取知乎网
知乎已经成为了爬虫的训练场,本文利用Python中的requests库,模拟登陆知乎,获取cookie,保存到本地,然后这个cookie作为登陆的凭证,登陆知乎的主页面,爬取知乎主页面上的问题和对应问 ...
- cookie登录知乎
用cookie登录个人知乎主页 步骤: 1.用自己账号登录知乎,然后复制下来自己的cookie信息.2.用request.get(url,headers=headers)把cookie传入get请求中 ...
最新文章
- CPU和GPU跑深度学习差别有多大?
- 如何在一个背景图像上,做半透明的图。
- 第 1 章 虚拟化 - 013 - 动手实践 Linux VLAN
- HDU.2561 第二小整数(water)
- arduino编译失败_Arduino编译时失败
- 【DP】砝码称重 (ssl 1072)
- keep老是显示服务器开小差,nginx+keepalived高可用服务器宕机解决方案
- opencv Mat push_back
- oracle自定义函数获取省份,Oracle 自定义函数Function
- mysql 视图报错_MySQL使用Union创建视图报错
- jquery实现某宝放大点击切换
- VC++ 设置桌面壁纸
- win10无法新建文件夹怎么办?(已解决)
- oracle同义词只有谁可以使用,oracle 同义词(synonym)
- 惠普笔记本U盘重装系统教程(转载)
- 2020年小博公众号文章集锦
- 梦幻西游手游转区没服务器显示不出来,《梦幻西游手游》怎么转服 转服需要满足条件介绍...
- 跨平台Brave浏览器(一百零三)
- New Bing已经出来了,怎么防止Bing跳转到国内版(cn.bing.com)?
- appium连接vivo手机,启动APP后就不动了--其它手机正常