作用
1.Session是服务器端技术,服务器在运行时为每一个用户的浏览器创建了一个其独享的Session对象
2.由于session为各个用户浏览器独享,所以用户在访问服务器的不同页面时,可以从各自的session中
读取/添加数据,从而完成相应任务
Session原理示意图
1.当用户打开浏览器,访问某个网站,操作sessio时,服务器就会在内存(服务器端内存)为该浏览器分配一个session对象,该session对象
被这个浏览器独占
2.这个session对象也可以看作是一个容器/集合,session对象默认存在时间时30min(在Tomcat/conf/web.cml中配置的),也可以修改
Session可以做什么
1.网上商城中的购物车
2.保存登录用户信息
3.将数据保存到session中,供用户在访问不同页面时,实现跨页面访问数据
4.防止用户非法登录到某个页面
......
如何理解session
1.session存储结构示意图
2.可以把session看作是容器类似HashMap,有两列(K-V),每一行就是session的一个属性
3.每个属性包含有两个部分,一个是该属性的名字(String),另一个是它的值(Object)
session中的常用方法
1.创建和获取Session(第一次调用的创建Session,之后调用就是获取创建好的Session):HttpSession hs=request.getSession();
2.向session添加属性:hs.setAttribute(String name,Object val);
3.从session得到某个值:Object obj=hs.getAttribute(String name);
4.从session删除某个属性:hs.removeAttribute(String name);
5.isNew():判断是不是刚创建出来的Session
6.每个Session都有一个唯一标识ID,通过getId()得到Session的会话id值
Session的底层机制
session底层机制示意图1:
session底层机制示意图2:
创建和修改Session
package com.test.session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
public class CreateSession extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取Session,同时也可能创建Session
HttpSession session = request.getSession();
//2.给Session获取id
System.out.println("当前sessionID="+session.getId());
//3.给session存放一些数据、
session.setAttribute("email","zs@qq.com");
//4.给浏览器回送一个回复
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("<h1> 创建Session成功 </h1>");
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
读取session信息
package com.test.session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
public class ReadSession extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//演示读取Session
//1.获取Session,如果没有Session也会创建
HttpSession session = request.getSession();
//输出sessionID
System.out.println("sessionid="+ session.getId());
//2.读取属性
Object email = session.getAttribute("email");
if(email!=null){
System.out.println("Session属性 email="+(String)email);
}else {
System.out.println("Session没有这个属性");
}
//4.给浏览器回送一个回复
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("<h1> 读取Session成功 </h1>");
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}