Session只能在一次会话的多次请求间共享数据
,将数据保存在服务器端的对象中。
一、Session使用步骤
(1)获取Session对象
HttpSession session = request.getSession();
(2)使用HttpSession对象
Httpssion对象 | 说明 |
---|---|
Object getAttribute(String name) | 根据键获得Session值 |
void setAttribute(String naem,Object value) | 设置Session的键和值 |
void removeAttribute(String name) | 移除Session |
☆Session会话演示
在SessionDemo1中设置Session,在SessionDemo2中获得Session。
package com.ql.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 类说明:
* 设置Session
* @author qianliangguo
*/
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取Session
HttpSession session = request.getSession();
//2.存储数据
session.setAttribute("msg", "hello session");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
}
package com.ql.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 类说明:
* 使用Session获取数据
* @author qianliangguo
*/
@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取Session
HttpSession session = request.getSession();
//2.获得数据
Object msg = session.getAttribute("msg");
System.out.println(msg);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
}
二、Session的原理
服务器如何确保在一次会话范围内,多次获取Session对象是同一个?
①Session是依赖于Cookie的
:而Cookie是由请求头和响应头来实现的。②创建Session对象,并用用SessionID标注
:第一次获取Session,没有Cookie,会在内存中创建一个新的Session对象,并标记ID,存入Cookie中发送到浏览器。③通过SessionID匹配
:下一次请求时,通过Cookie请求头中的SessionID与服务器中的对象匹配。