Jsp_04 session与cookie
会话的概念
一次会话是指浏览器从浏览器第一次给服务器发送请求建立到其中一方断开结束会话的一个过程。它包含多次请求和响应。
会话是用来在一次会话的范围内的多次请求间共享数据的
会话分为两类:客户端会话技术(cookie)和服务器端会话技术(session)。
1.cookie:将数据存储到客户端
2.session:将数据储存到服务器端
概念
会话:客户端浏览器和服务器之间连续发生一系列请求和响应的过程。
会话状态:顾名思义,即是会话过程中的状态信息。
如何实现由状态的会话?
浏览器对每次请求的进行标识,标识号SessionID,在Servlet中两种机制:Cookie和Session。
Cookie机制
采用是在客户端保持HTTP状态信息的方案,,浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件,一旦浏览器保存了某个Cookie,每次浏览器访问WEB服务器的时候,都会把这个Cookie回传给WEB服务器。
跳转使用:
增删改查
增删改:用重定向(response/js);
查询:用转发或重定向。一般使用转发
什么是session
①是服务器端的状态管理技术。
②当浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id号,称之为sessionId)。接下来,服务器在默认情况下,会使用set-cookie消息头将这个sessionId发送浏览器,浏览器会将这个sessionId保存下来(内存中,因为指定生存时间)。当浏览器再次访问服务器时,会将sessionId使用cookie消息头发送给服务器,服务器依据这个sessionId就可以找到之前创建的session对象。
③用户与服务器之间的多次交互叫一次会话。
Session概念
session是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器的对象中。
Session和cookie一样,都是域对象
session对象的生命周期:创建---->使用----->消亡
//当客户端浏览器第一次访问服务器时,服务器为这个浏览器创建一个Session对象。
//在服务器端使用request.getSession()或request.getSession(true)方法来获得Session对象。
request.getSession() //获得Session对象
session.getId() //获得session对象的ID
//创建Session对象后,使用Session对象进行数据的存取和传输。
session.setAttribute(String name, Object obj) //将信息保存在session范围内
session.getAttribute(String name) //获取保存在session范围内的信息
session.getAttributeNames(); //返回Session对象中存储的每一个属性对象,枚举型
session.isNew(); //判断session对象是不是新的
以下3种方法可以结束session对象:
1.关闭浏览器;
2.请用HttpSession的invalidate()方法;
3.session超时。
//设置页面是否使用Session管理会话
<%@page session=“false”%> //表示该JSP页面的Session不可用,默认是true
sess.setAttribute(“username”,“Join”);
sess.getAttribute(“username”);
//方法:
getCreationTime(); //返回Session被创建的时间.单位毫秒
invalidate(); //设置session无效,一般用在[安全退出]
removeAttribute(“key”); //删除属性
设置Session对象的有效期
<session-config>
<!-- 会话超时间长为1分钟 -->
<session-timeout>1</session-timeout>
</session-config>
Session对象的判断
//在登录后的JSP页面文件中,通过session来做是否已登录的判断。
String username=session.getAttribute("username");
if(username==null){
response.sendRedirect("login.jsp");
}
Cookie是什么
在互联网中,Cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。
cookie保存在浏览器本地、一个会话中每一次请求都携带着它;
通过cookie的getCookie()方法即可获取到所有cookie对象的集合;
通过cookie对象的getName()方法可以获取到指定名称的cookie;
通过getValue()方法即可获取到cookie对象的值。
Cookie的作用
对特定对象的追踪;
统计网页浏览次数;
简化登录。
Cookie的安全性
容易信息泄露。 --文本,可破解,安全性不高 --Cookie具备加密
Cookie使用
通过page指令导入包(可省略)
<%@ page import=“javax.servlet.http.Cookie” %>
创建
Cookie newCookie=new Cookie(“key”,value);
写入(将Cookie响应到客户端)
response.addCookie(newCookie);
关于Cookie的删除
客户端的Cookie不能由服务器代码来删,而是客户端自己删。
Cookie不能通过代码删,但可以通过代码设置它无效:即设置它的有效时间。
快速入门
步骤:
服务器创建cookie对象,绑定数据
new Cookie(String name,String value)
发送cookie对象给浏览器
response.addCookie(Cookie cookie)
获取浏览器返回的cookie,拿到数据
Cookies[] request.getCookies()
案例
cookieDemo1.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
cookie快速入门
*/
//1.创建cookie对象
Cookie c=new Cookie("msg","hello");
//2.通过添加到response从而发送cookie给客户端
//这样客户端的浏览器上就会保存一个cookie了
response.addCookie(c);
}
cookieDemo2.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
cookie快速入门
*/
//3.获取cookie,cookie可以有多个
Cookie[] cookies = request.getCookies();
//4.遍历cookies,获取数据
if(cookies!=null){
for (Cookie c:cookies
) {
String name = c.getName();
String value = c.getValue();
System.out.println(name+":"+value);
}
}
}