1.概述
在浏览器端保存数据,数据可以被查看、获取,数据安全性较低。重要的数据应
该存放在不容易获取到的位置。服务器是一个良好的选择。数据通过服务器共
享,这门技术就是session会话技术。
2.工作原理
每一个浏览器在访问服务器时,都会创建各自对应的session对象来保存数据。相
互之间不会影响,是因为在session对象身上会包含一个sessionid,可以通过这个id
来区分每一个浏览器对应的session。
a.本质原理:
本质是通过一个名称为JSESSIONID的cookie来进行工作的。这个cookie会保存在
浏览器中使用。
b.session的特点:
session是一门服务器的技术,将数据保存的服务器端。保存安全性要求较高的
数据。且存储时间较短的数据。
c.创建session对象
request.getSession();//如果服务器中有session对象,则取出使用,如果没有session
对象则创建一个新的session对象使用。
request.getSession(true);//如果服务器中有session对象,则取出使用,如果没有
session对象则创建一个新的session对象使用。
request.getSession(false);//如果服务器中没有session对象,则返回null,如果有
session对想则取出使用。(判断session是否存在时使用)
3.作为域对象使用
域对象:如果一个对象身上有一个可以被看见的范围,在这个范围内利用对象身
上的map实现数据的共享,这个对象就可以称之为域对象。
a.操作api:
b.生命周期:
request.getSession()方法调用的时候session对象产生。
1)意外身亡:在服务器意外关闭的情况下,session对象会被销毁。在服务器正常
关闭的情况下,如果session对象未被释放,则其中的内容会序列化到磁盘上,
这个过程,称之为钝化。当服务器再次启动的时候,会重新读取磁盘上这个文
件,这个过程称之为活化。
2)自杀:主动session.invalidate()方法会立刻释放当前session对象。
3)超时死亡:在[tomcat]/conf/web.xml中有session默认的最大生命时长配置
标签,默认值为30分钟。超过30分钟,则当前session会被释
放。
c.作用范围:
整个会话范围。
d.主要功能:
在整个会话范围内共享数据
e.代码实现:
1)SessionDemo1.java
package cn.tedu.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//session共享数据--作为域对象使用
public class SessionDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取session对象
HttpSession session = request.getSession();
//2.作为域对象使用--设置域属性
session.setAttribute("name", "张三丰");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2)SessionDemo2.java
package cn.tedu.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SessionDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取session对象
HttpSession session = request.getSession(true);
//2.获取域属性
String name = (String) session.getAttribute("name");
System.out.println("name:"+name);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}