Session
服务器会给每一个用户(浏览器)创建一个Session对象
打开浏览器会创建一个sessionID,关闭浏览器则session失效
注意
Session里面的东西存放在Web服务器中,用户拿到的是SessionID!!!
SessionID是每个用户唯一的
Session是用户级的,Application(ServletContext)是应用级的
代码示例
SessionTest.java
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;
public class SessionTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码问题
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("content-type","text/html;charset=UTF-8");
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name","马赫666");
//获取Session的ID
String id = session.getId();
//判断Session是不是新创建的
if (session.isNew()){
resp.getWriter().println("session创建成功,ID="+id);
}else{
resp.getWriter().println("session已经存在,ID="+id);
}
//获取Session中的内容
//String name = (String) session.getAttribute("name");
//System.out.println(name);
//注销Session
//session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
配置Session的有效时间
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>sTest</servlet-name>
<servlet-class>com.mahe666.servlet.SessionTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sTest</servlet-name>
<url-pattern>/sTest</url-pattern>
</servlet-mapping>
<session-config>
<!--代表一分钟后过期-->
<session-timeout>1</session-timeout>
</session-config>
</web-app>
Session销毁
只有两种销毁方法
- 调用invalidate手动销毁
- 配置有效时间