本文主要介绍Session的基本知识及基本使用方法
服务器为了保存用户状态而创建的一个特殊的对象。
当浏览器第一次访问服务器时,服务器创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId以cookie的方式发送给浏览器。
当浏览器再次访问服务器时,会将sessionId发送过来,服务器依据sessionId就可以找到对应的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;
/**
* Servlet implementation class SessionIndexServlet
*/
@WebServlet("/SessionIndexServlet")
public class SessionIndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SessionIndexServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException { // TODO Auto-generated
HttpSession session = request.getSession();
session.setAttribute("name", "wangwei");
response.sendRedirect("/servlet/SessionLogin"); }
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
代码如下(示例):
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;
/**
* Servlet implementation class SessionLoginServlet
*/
@WebServlet("/SessionLogin")
public class SessionLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SessionLoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session =request.getSession();
String name =(String)session.getAttribute("name");
response.getWriter().println("name"+name);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
为了避免Session中存储的数据过大,Session需要销毁:
超时自动销毁。
从用户最后一次访问网站开始,超过一定时间后,服务器自动销毁Session,以及保存在Session中的数据。
Tomcat 服务器默认的Session超时时间是30分钟可以利用web.xml设置超时时间单位是分钟,设置为0表示不销毁。
<session-config> <session-timeout>20</session-timeout> </session-config>
调用API方法,主动销毁Session
使用 session.invalidate()
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate();
response.setContentType(
"text/html; charset=utf-8");
response.getWriter().println("呵呵!");
}
}
参考:—什么是Session
相同点:
这俩都是浏览器和服务器之间交互的工具,都是用来跟踪浏览器用户身份的会话方式。
都是在第一次访问时,由服务器产生的
不同点:
存放位置不同
cookie保存在客户端,
session保存在服务端
存取方式不同
cookie只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。
session中能够存取任何类型的数据
安全性不同
cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修改cookie中的内容。
session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
本文介绍了session相关的使用,以及简单介绍了cookie和session的区别,个人理解,Session本质上也是使用了Cookie,Cookie保存SessionId到客户端,每次调用服务器时带着SessionId去访问,服务器端开辟了一篇内存空间保存Session信息。