Session:
服务器会给每个用户(浏览器)创建一个 Session 对象
一个 Session 独占一个浏览器,只要浏览器没有关闭,这个 Session 就存在
代码如下:
package com.demo.cookie;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 Session extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html");//得到SessionHttpSession session = req.getSession();//给Session中存东西session.setAttribute("name","hhh");//获取Session的IDString id = session.getId();//判断Session是否是新创建的if (session.isNew()){resp.getWriter().write("Session创建,ID:"+id);}else {resp.getWriter().write("Session已经在服务器存在,ID:"+id);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
web.xml 注册:
<servlet><servlet-name>se</servlet-name><servlet-class>com.demo.cookie.Session</servlet-class></servlet><servlet-mapping><servlet-name>se</servlet-name><url-pattern>/se</url-pattern></servlet-mapping>
运行后查看结果
应用程序存入 SessionID
请求头存入 SessionID
注销 Session:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("name");//手动注销Sessionsession.invalidate();}
进入注销页再进入 SessionID 页,SessionID 改变
还可以设置 Session 默认失效时间
<!-- 设置Session默认失效时间 --><session-config><!-- 15分钟后Session自动失效,以分钟为单位 --><session-timeout>15</session-timeout></session-config>
Session 与 Cookie 的区别:
1. Cookie 是把用户的数据写给用户的浏览器,浏览器保存,可以保存多个
2. Session 把用户的数据写到用户独占 Session 中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
3. Session 对象由服务器创建
服务器中的 Session 可以存东西,客户端向服务器发起请求,将登记一个 Session
用户拿到的是 SessionID,每个用户唯一