servlet(5) - Cookie和session - 小易Java笔记
1、会话概述
(1)会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
(2)会话过程中的数据不宜保存在request和servletContex中,所以一般中cookie保存
(3)保存会话数据的两种技术
==> Cookie:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器
==> HttpSession:Session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的HttpSession对象
2、Cookie API
javax.servlet.http.Cookie类用于创建一个Cookie,response接口中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。
Cookie类的方法:
==> new Cookie(String name,String value) 新建一个cookie
==> cookie.getName() 获取此Cookie对象的name
==> cookie.getValue()与cookie.setValue() 获取和设置此Cookie对象的value
==> cookie.setMaxAge()与cookie.getMaxAge() 设置此cookie的有效时间(单位是秒)
==> cookie.setPath()与cookie.getPath()
==> cookie.setDomain()与cookie.getDomain()
3、Cookie的属性
(1)name:必须的
(2)value:必须的
(3)comment:可选的。注释
(4)path:可选的
写Cookie的程序的访问路径是:http://localhost:8080/testServlet/cookie/cookieDemo(其中:localhost就是域名;/testServlet/cookie就是当前Cookie的path)。访问的地址的URI.startWith(cookie的路径)为true,客户端的数据会传给服务器
==》比如浏览器存的cookie的路径是/testServlet
现在访问的地址是:http://localhost:8080/testServlet/cookie/cookieDemo 客户端的数据会传给服务器
现在访问的地址是:http://localhost:8080/testServlet/cookieDemo 会
如果一个Cookie的路径设置成了/testServlet,意味着当前应用下的所有资源浏览器都会传给给服务器
==》比如浏览器存的cookie的路径是/testServlet/cookie
现在访问的地址是:http://localhost:8080/testServlet/cookie/cookieDemo 会
现在访问的地址是:http://localhost:8080/testServlet/cookieDemo 不会
(5)domain:可选的。该Cookie所属的网站域名(localhost)默认值。
(6)maximum age:可选的。单位是秒。不设置就是会话过程(存在浏览器的内存中)。如果是0,说明要删除。
(7)version:可选的
(8)区分Cookie:domain + path + name 来区分的
4、Cookie的增加、读取、删除
(1)增加:HttpServletResponse.addCookie(name,value)
一个浏览器针对一个网站最多存20个Cookie;最多存300个Cookie,每个Cookie的长度不能超过4KB
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie
(2)读取:HttpServletRequest.getCookies() 只能从客户端得到key和value的值
(3)删除:cookie.setMaxAge(0);
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
删除cookie时,path必须一致,否则不会删除
(4)示例
==>增加cookie
PrintWriter out = resp.getWriter();
out.println("写入Cookie测试"); Cookie cookie = new Cookie("username", "smalle"); //创建一个Cookie实例
cookie.setMaxAge(60); //单位是秒,设置有效时间为1分钟。最大可以设置Integer.MAX_VALUE
resp.addCookie(cookie); // 往响应流中写入Cookie out.println("如果不清除cookie,即使关闭了浏览器,只要在60内访问任可以访问到");
---------------------------------------------------------------------------------
==>读取cookie
PrintWriter out = resp.getWriter();
out.println("读取Cookie测试"); Cookie[] cookies = req.getCookies(); //获取请求Cookie数组
if(cookies != null) {
for(Cookie cookie : cookies) { //遍历cookie信息
out.println("Cookie名: " + cookie.getName());
out.println("Cookie值: " + cookie.getValue());
out.println("从客户端只能获取key和value,利用getMaxAge()等方法是获取不到相应的信息的");
}
}else {
out.println("您还没有Cookie值");
}
----------------------------------------------------------------------------------
==>清除cookie
Cookie cookie = new Cookie("username", null);
cookie.setMaxAge(0);
//cookie.setPath("/");
resp.addCookie(cookie);
/**
* 如果需要注销所有的cookie
* Cookie[] cookies = request.getCookies();
* for (Cookie cookie : cookies) {
* cookie2.setMaxAge(0);
* //cookie.setPath("/");
* response.addCookie(cookie);
* }
*/
5、Session介绍
(1)在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象)。注意:默认情况下,一个浏览器独占一个session对象。服务器就把数据保存在这个session对象中,当退出浏览器时,保存的数据就会丢失。
(2)Session和Cookie的主要区别在于:
==》Cookie是把用户的数据写给用户的浏览器。
==》Session技术把用户的数据写到用户独占的session中。Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
(3)Session就相当于特殊的Cookie,Cookie中的JSESSIONID就是此session的ID。可用session.getId()验证
6、创建HttpSession
(1)public HttpSession getSession()。调用此方法时,容器会先检查客户端先前发送出的请求是否创建过Http会话。如果没有,容器就会新建一个会话,并赋予一个唯一的会话ID。如果有,容器会根据客户请求中的会话ID找到匹配的会话返回。
(2)public HttpSession getSession(boolean flag)。此方法的flag参数是用来置顶是否有必须要创建一个新的会话。调用getSession(false)时,若客户先前没有建立过会话。则方法将返回null。如果flag为true则同第一种
(3)HttpSession的常用操作:
==> public boolean isNew():判断当前会话对象是不是一个新创建的会话。
==> public Object getAttribute(String name); 根据置顶名从会话中取出某个属性对应的值。
==> public void setAttribute(String key,Object value); 设置指定名称将某个对象存放在会话中。
==> public void removeAttribute(String key); 根据key删除会中中的对象。
==> public long getCreationTime():返回session创建的时间的毫秒值。
==> public String getId(); 获取会话的SessionId;
==> public long getLastAccessdTime(); 得到最好一次访问次会话的时间毫秒值。
==> public long getMaxInactiveInterval(); 得到会话超时的时间秒值。
==> public void setMaxInactiveInterval(int interval); 设置会话超时的时间秒值。
==> public void invalidate(); 让所有会话失效。
(4)示例
==>设置session
//访问的话,直接在浏览器中输入 http://127.0.0.1:8080/testServlet/setSession?name=smalle
String name = req.getParameter("name");
HttpSession session = req.getSession(); //获取HttpSession对象
session.setAttribute("name", name); //写入session,实际上时写在内存中了,在cookie保存相应的ID
/** 跳转到getSession查看保存的值。
* 此处的href必须为/testServlet/getSession或者为getSession才hi跳转到http://127.0.0.1:8080/testServlet/getSession
* 带/表示绝对路径,不带/表示相对路径(相对于根目录 http://127.0.0.1:8080/项目名)
*/
resp.getWriter().write("<a href='getSession'>click view</a>");
-------------------------------------------------------------------------------------
==>得到session
HttpSession session = req.getSession(); //获取HttpSession对象
String name = (String)session.getAttribute("name");
resp.getWriter().write("保存的值为===" + name);
//这两个\n都能显示换行
resp.getWriter().write('\n'+ "\nID为===" + session.getId() + "===他就是Cookie下的JSESSIONID的值"); //这句是验证5、Session介绍中的第(3)条
----------------------------------------------
==>web.xml中的代码省略
7、更改内存中HttpSession对象的超时时间(注意单位是分钟)
修改工程的web.xml
<session-config>
<session-timeout>30</session-timeout> <!--自然整数,单位是分钟,即保存30分钟-->
</session-config>
servlet(5) - Cookie和session - 小易Java笔记的更多相关文章
- servlet(6) - servlet总结 - 小易Java笔记
垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...
- servlet(4) - servletAPI - 小易Java笔记
Servlet规范核心类图 1.请求和响应对象 ==> HTTP协议包含请求和响应部分. ==> HttpServletRequest就代表着请求部分 ==> HttpServlet ...
- servlet(2) - 利用MyEclipse新建一个servlet - 小易Java笔记
1.Tomcat在MyEclipse中集成 ==> Window-preferences-MyEclipse-Servers-Tomcat-Tomcat 6.x-点击右侧的Browse,选择你的 ...
- JSP(3) - 9个JSP内置对象 - 小易Java笔记
1.9个JSP内置对象 内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse config Servle ...
- JSP(1) - JSP简介、原理、语法 - 小易Java笔记
1.JSP简介 (1)JSP的全称是Java Server Pages(运行在服务器端的页面),实际就是Servlet(学习JSP的关键就是时刻联想到Servlet) (2)JSP.Servlet各自 ...
- servlet(3) - servlet知识点 - 小易Java笔记
1.servlet的生命周期 (1)容器最终要调用service方法为客户进行服务.(此处“容器”指java运行的环境,tomcat是jsp/servlet的容器) ==> 在内存中一个Serv ...
- servlet(1) - 手写第一个servlet程序 - 小易Java笔记
声明:如tomcat的安装目录为D:\Java\tomcat6,下面要根据tomcat的安装目录而定 1. 建立程序的文件结构 ==>找到tomcat的安装目录,在webapps目录下新建一个名 ...
- JSP(2) - JSP指令 - 小易Java笔记
JSP指令是给JSP引擎用的,即给服务器用的.作用是告诉服务器,该如何处理JSP中除了指令之外的内容.包括page.include.taglib三种 基本的语法格式:<%@ 指令名称 属性1=& ...
- 【学习】013 Servlet、Cookie、Session的简述
Servlet核心内容 Sevlet的生命周期(重点) Servlet重要的四个生命周期方法 构造方法: 创建servlet对象的时候调用.默认情况下,第一次访问servlet的时候创建servlet ...
随机推荐
- 洛谷P1189'SEARCH'
题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息. 编写程 ...
- AGV小车典型设计算法及应用
1. AGV小车的发展背景 在现代化工业的发展中,提倡高效,快速,可靠,提倡将人从简单的工作中解放出来.机器人逐渐替代了人出现在各个工作岗位上.机器人具有可编程.可协调作业和基于传感器控制等特点,自动 ...
- Android Studio的初体验
在机缘巧合之下遇到了安卓开发,接触了Android Studio开始了漫长的改bug的道路,以下为简易版心酸历程 首先我需要成功安装Android Studio,由于我过于叛逆以及为了避免出错于是从一 ...
- LTE/EPC中,MME怎么找到UE的HSS的?
http://bbs.c114.net/forum.php?mod=viewthread&tid=486247 HSS---归属用户服务器,我的理解:一般来说只有一个,或者是一个分布式数据库. ...
- 静态化技术Freemarker
什么是Freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP ...
- Hibernate关联映射之_一对一
数据库模型 一般对一对一的关系而言,会存在一个主从关系.如 人 与 身份证,就是一个一对一关系, 人 是主,身份证 是从 Person PK:id name age Id_Card PK.FK:id ...
- COGS 497——奶牛派对
奶牛派对 我们发现每头牛需要走的路程即为它到x的最短路+x到它的最短路. 转化: 于是这道题变成了一道典型的单源最短路问题,只需求出每个点到x的最短路dl,以及从x到此点的最短路d2,然后去找max( ...
- [洛谷P3937]Changing
题目大意:有 $n$ 盏灯环形排列,顺时针依次标号为 $1\cdots n$.初始时刻为 $0$ ,初始时刻第 $i$ 盏灯的亮灭 $a_i$, $0$ 表示灭, $1$ 表示亮.下一时刻每盏灯的亮灭 ...
- 【BZOJ 3316】JC loves Mkk 01分数规划+单调队列
单调栈不断吞入数据维护最值,数据具有单调性但不保证位置为其排名,同时可以按照进入顺序找出临近较值单调队列队列两端均可删除数据但只有队末可以加入数据,仍然不断吞入数据但同时可以额外刨除一些不符合条件的数 ...
- ubuntu下使用sudo 出现unable to resolve host 解决方法
Linux 环境, 假设这台机器名字叫dev(机器的hostname), 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host dev虽然sudo 还是可以正 ...