什么是Session
- session 在服务器端,cookie 在客户端(浏览器)
- session 默认被存在在服务器的一个文件里(不是内存)
- session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
- session 可以放在 文件、数据库、或内存中都可以。
- 用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id
- 可以近似理解为浏览器给服务器打了个标记
- session id 是浏览器自动发送的
样例
public class Session001 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF8");
resp.setCharacterEncoding("UTF8");
resp.setContentType("text/html");
ObjPerson person = new ObjPerson("kitty guy",1000,"中国");//自己手动创建的对象
HttpSession session = req.getSession();
session.setAttribute("name","王老吉");
session.setAttribute("person",person);
String sessionId = session.getId();
if(session.isNew()){
resp.getWriter().println("session创建成功 Id为:"+sessionId);
}
else
{
resp.getWriter().println("session已经存在Id为:"+sessionId);
resp.getWriter().println("<br>");
resp.getWriter().println("servlet创建的session name的对象为"+session.getAttribute("name"));
resp.getWriter().println("<br>");
resp.getWriter().println("servlet创建的session person的对象为"+session.getAttribute("person").toString());
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
重置session
public class ResetSession extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
或者在web.xml中配置
<session-config>
<!-- 单位是分钟-->
<session-timeout>120</session-timeout>
</session-config>