JavaWeb之Servlet:Cookie 和 Session
会话
现实生活中我们会用手机跟对方对话,拿起手机,拨号,然后对面接听,跟着互相通话,最后会话结束。
这个过程也可以用我们的B/S模式来描述:
打开浏览器—>输入地址->发出请求->服务器收到请求->向浏览器发出响应->..重复.->关闭浏览器
这样的过程我们用 “会话” 来描述,上面就一次会话的例子。
会话管理
知道会话的概念后,我们在平时上网是否可以看到一些网页有这样的操作:当你是第一次登入这个网站,网站会发出:”欢迎来到本网站”。 然而,当你第二次登入该网站,它就会发出:”欢迎再次回来”。 为什么服务器会知道我们已经登入过该页面呢?无错,就是在与服务器会话的过程中产生了一些数据,而这些数据被保存下来,服务器根据这些数据来判断你是否登陆过该页面,而输出不同欢迎标语。
下面就来学习两门会话信息管理技术:
Cookie技术: 会话数据保存在浏览器客户端。
Session技术:会话数据保存在服务器端。
Cookie技术
什么是Cookie技术:
一种会话数据管理技术,该技术把会话数据保存在浏览器客户端。
那么Cookie技术的原理是什么,它是如何工作的呢?
1)首先浏览器向服务器发出请求。
2)服务器就会根据需要生成一个Cookie对象,并且把数据保存在该对象内。
3)然后把该Cookie对象放在响应头,一并发送回浏览器。
4)浏览器接收服务器响应后,提出该Cookie保存在浏览器端。
5)当下一次浏览器再次访问那个服务器,就会把这个Cookie放在请求头内一并发给服务器。
6)服务器从请求头提取出该Cookie,判别里面的数据,然后作出相应的动作。
Cookie的体验
知道了Cookie的原理后,我们就用它来实现一些功能吧~
从它的原理中,我们知道Cookie是在服务器端创建的,那么我们在Servlet中创建一个Cookie对象吧:
public class cookieTest extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException { Cookie cookie = new Cookie("name", "value");
} }
Cookie的构造方法接收两个参数,第一个参数是该要传递的数据的名字,第二个是该数据的值。
然后我们把这个Cookie加到响应头,发送给浏览器吧~
Cookie cookie = new Cookie("name", "value");
response.addCookie(cookie);
这样一个Cookie就发送给浏览器了,我们在浏览器看看发过来的响应头:
有一个Set-Cookie的请求头,它保存了我们设置的信息。
然后我们用浏览器再次访问该Servlet,看看它的请求头:
可以看到,浏览器会把这个Cookie信息发过去服务器。
那么服务器收到这个请求后,如何得到该Cookie里的数据呢?
我们可以这样做:
Cookie cookie = new Cookie("name", "value");
response.addCookie(cookie); Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie c: cookies){
String name = c.getName();
String value = c.getValue();
System.out.println(name+"="+value);
}
}else{
System.out.println("没有cookie信息");
}
调用request.getCookies()方法,返回一个Cookie数组,然后遍历它把里面的内容取出来吧!
Cookie常用方法
1)创建Cookie对象
Cookie(java.lang.String name, java.lang.String value)
2)设置Cookie对象
setPath(java.lang.String uri) --设置cookie的有效路径,就是指定该Cookie访问哪个资源时会传过去,访问其他资源则就不会传。
setMaxAge(int expiry) --设置cookie的有效时长,以秒为单位
setValue(java.lang.String newValue) --设置cookie的值
3)发送cookie信息到浏览器
response. addCookie(Cookie cookie)
4)接收浏览器发送的cookie信息
Cookie[] getCookies()
Cookie细节
1)设置cookie的有效路径: setPath(路径) 。把cookie设置到某个路径下,那么浏览器在该路径下访问服务器时就会带着cookie信息到服务器;否则,就不会带着Cooke信息到服务器。
2)设置cookie的有效时长: setMaxAge(整数)。
正整数: 表示cookie数据保存在浏览器的缓存区中(硬盘中),以秒为单位。例如,10: cookie在10秒之后失效!
负整数: 表示cookie数据保存在浏览器的内存区中。关闭浏览器cookie就会失效!
零: 表示删除同名的cookie数据
3)设置cookie的值: setValue(值)
4)cookie保存的会话数据类型必须是字符串的。浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
5)cookie不适合保存敏感数据(例如密码)
Session技术
什么是Session技术:
一种会话数据管理技术,该技术把会话数据保存在服务器端。
同样都是会话数据管理技术,为什么我们要发明Session技术呢?
我们先分析一下Cookie的局限性:
1)Cookie数据类型都是String,且容量有限制的。
2)Cookie不适合保存敏感数据
所以,Session技术可以解决这两种情况。
那么Session技术的原理是什么,它是如何工作的呢?
1)浏览器发出请求到服务器。
2)服务器会根据需求生成Session对象,并且给这个Session对象一个编号,一个编号对应一个Session对象
3)服务器把需要记录的数据封装到这个Session对象里,然后把这个Session对象保存下来。
4)服务器把这个Session对象的编号放到一个Cookie里,随着响应发送给浏览器
5)浏览器接收到这个cookie就会保存下来
6)当下一次浏览器再次请求该服务器服务,就会发送该Cookie
7)服务器得到这个Cookie,取出它的内容,它的内容就是一个Session的编号!!!
8)凭借这个Session编号找到对应的Session对象,然后利用该Session对象把保存的数据取出来!
Session的体验
下一面我们就在Servlet内创建一个Session吧:
public class sessionTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { HttpSession session = request.getSession();
session.setAttribute("name", "Rime");
}
}
这样当浏览器请求这个Servlet服务时,就会把这个session发过去啦~,我们来看看服务器收到的响应头吧!
可以看到服务器给浏览器发出了一个 Set-Cookie 的响应头,里面有一个JSESSIONID!没错,这个就是Session的编号了!
然后我们再次访问这个Servlet吧!
浏览器会把保存这个JSESSIONID的cookie发送过去服务器~那么服务器接收这个session编号,然后取出这个编号对应的数据吧!!
//得到数据
String name = (String)session.getAttribute("name"); System.out.println("name="+name);
然后看到输出结果:
name=Rime
这样就服务器就可以根据这个name的值来根据需要做出一些动作了~
Session的API
学习HttpSession
1)创建/得到HttpSession对象
HttpSession request.getSession()
HttpSession request.getSession(boolean create)
2)HttpSession作为域对象保存会话数据
void setAttribute(java.lang.String name, java.lang.Object value) 保存数据
java.lang.Object getAttribute(java.lang.String name) 得到数据
void removeAttribute(java.lang.String name) 清除数据
3)session细节:
java.lang.String getId() 得到session对象的编号
void setMaxInactiveInterval(int interval) 设置session对象的有效时长
void invalidate() 销毁session对象
Session细节
1)得到session编号: getId()
2)session对象生命周期:
2.1 session对象什么创建?
执行request.getSession()方法时
2.2 session对象什么销毁?
1)默认情况下,session对象在30分钟之后服务器自动销毁。
2)手动设置session有效时长
void setMaxInactiveInterval(int interval) -以秒为单位。
3)配置session的有效时长(统一配置)
4)手动销毁
void invalidate()
3)getSession方法的使用
getSession(true) / getSession() : 创建或得到session对象。如果得不到session对象,创建 新的session对象。主要是用于创建session对象的。
getSession(false) :得到session对象。如果得不到session对象,返回null。主要用于判断是否可以得到session对象的。
4)session编号的cookie过期时间:
默认情况下,cookie是在浏览器关闭时失效!!!
修改cookie的有效时长:
setMaxAge(正整数);
JavaWeb之Servlet:Cookie 和 Session的更多相关文章
- JavaWeb -- 会话, Cookie 和 Session
1. 会话 •Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,web资源处理的就是 ...
- Servlet Cookie、Session
HTTP不能保持连接,可使用会话保存用户信息. 常用的会话技术有2种:Cookie.Session. Cookie 1.原理 当用户第一次访问某个网站时,服务器设置Cookie,存储用户信息,放在响应 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session技术
Servlet提供了HttpSession接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet容器使用这个接口来创建一个HTTP客户端和HTTP服务器之 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session常用方法
● public Object getAttribute(String name) 该方法返回在该session会话中具有指定名称的对象,如果没有指定名称的对象,则返回null. ● public ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session优缺点
● 数据存储在服务器,安全. ● session能保存Object类型数据,也就是说能存储任意数据. ● 可存储的数据大小,理论上是无限制的. ● 因为数据存储在服务器端,当用户比较多时,会占 ...
- JavaWeb(二)cookie与session的应用
前言 前面讲了一堆虚的东西,所以这篇我们来介绍一下cookie和session的应用. 一.使用cookie记住用户名 1.1.思路介绍 1.2.实现代码 1)LoginServlet package ...
- JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)
1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...
- JavaWeb之Cookie和Session的区别
Cookie和Session的区别 一.cookie机制和session机制的区别 ********************************************************** ...
- JavaWeb(二)会话管理之细说cookie与session
前言 前面花了几篇博客介绍了Servlet,讲的非常的详细.这一篇给大家介绍一下cookie和session. 一.会话概述 1.1.什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接, ...
- Servlet 会话技术cookie和session
会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...
随机推荐
- 传输层(一)TCP的三次握手和四次挥手及关闭套接字的原理
TCP连接需三次握手才能建立,断开连接则需要四次握手. 客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_W ...
- 慕课网-安卓工程师初养成-4-11 Java循环跳转语句之 break
来源:http://www.imooc.com/code/1431 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 ...
- com学习(五)——实现多接口
从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口 IFun.当然如果想偷懒的话,我们可以把 200 个函数都加 ...
- Windows Server 2012下安装Hyper-V虚拟机
Windows Server 2012下安装Hyper-V虚拟机 Win server 2012系统中Hyper-V 性能进一步提高,广大爱好者都尝试体验它,可是有不少朋友无法正确安装虚拟机,尽管在网 ...
- WP_图片管理机制/异步读取网络图片
项目有这样的需求, 要求窗口加载一揽子图片,为了不让UI阻塞太久,采用异步读取后绑定显示的方案. 图片的下载应该采用并发的过程(等待网络响应会很耗时,一张一张的下载,等待时间太长) 图片的下载不能占用 ...
- 使用/proc实现内核与用户空间通信
1. 前言 Linux内核空间与用户空间的通信可通过"/proc"目录的文件读写来实现,如果只是控制内核中的参数而不是传输较多数据的话,用“/proc”是很合适的.另外一种内核 ...
- poj1001_Exponentiation
这题真是超级大模拟.好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊.注意零的处理.大 ...
- Android WebRTC 音视频开发总结(二)-- webrtcdemo介绍
这节主要介绍WebRTCDemo的结构,以此来简单了解WebRTC的调用流程,转载请说明出处(博客园RTC.Blacker) 1.先看WebRTCDemo的代码结构,如下图: 2.WebRTCDemo ...
- CentOS6.5下安装配置MySQL
CentOS6.5下安装配置MySQL,配置方法如下: 安装mysql数据库:# yum install -y mysql-server mysql mysql-deve 查看mysql-server ...
- mac 显示隐藏文件夹
在终端输入 defaults write com.apple.finder AppleShowAllFiles -boolean true;killall Finder即可