session

㈠ 什么是session?

    session是一种服务器端的状态管理技术。

    当浏览器访问服务器时,服务器会创建一个session对象(该对象有一个id属性,其值是唯一的,一般称之为sessionId),服务器在默认情况下,会使用cookie机制(将sessionId放到set-cookie消息头)将这个sessionId发送给浏览器;当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId找到之前的session对象。

 

㈡ 如何获得一个session对象

    方式一: HttpSession s = request.getSession(boolean flag);

    ① 当flag = true时

    先查看请求当中是否有sessionId,如果没有,则创建一个符合HttpSession接口要求的对象(即session对象);如果请求当中有sessionId,则依据sessionId查找对应的session对象是否存在,如果存在,则返回该session对象;如果不存在,则创建一个新的session对象。

 

    ② 当flag = false时

    先查看请求当中是否有sessionId,如果没有,返回null;如果请求当中有sessionId,则依据sessionId查找对应的session对象是否存在,如果存在,则返回该session对象;如果不存在,返回null。

 

    方式二:HttpSession s = request.getSession();该方法等价于request.getSession(true)。

 

㈢ session对象常用的方法

    String session.getId();   //获得sessionId

    session.setAttribute(String name, Object obj);  //绑订数据

    Object session.getAttribute(String name);//依据绑订名称获得绑订值,如果绑订值不存在,返回null。

    session.removeAttribute(String name);//解除绑订

 

㈣ session的超时

    ① 什么是session的超时

    服务器会将空闲时间过长的session对象删除掉。一般的服务器,默认的空闲时间是30分钟。

 

    ② 修改服务器缺省的session的超时限制

        ⑴ 修改Tomcat的conf/web.xml

        <session-config>

            <session-timeout>30</session-timeout>

        </session-config>

 

        ⑵ 某个web应用对应的web.xml文件里面,此时,只对该web应用有效。

 

        ⑶ setMaxInactiveInterval(int seconds);单位是秒

 

㈤ 立即删除session对象

    session.invalidate();

 

㈥ session案例: session验证,常用于登录

    step1, 在登录成功以后,在session对象上绑订一些数据。

        比如:session.setAttribute("user",user);

 

    step2,对于需要保护的资源(需要登录成功以后,才能访问的地址,比如main.jsp),添加session验证的代码。

        比如: Object obj = session.getAttribute("user");

              if(obj == null){

                  response.sendRedirct("login.jsp");

              }

 

㈦ session的优点与缺点(相对于cookie技术)

    优点:

        ① 安全: session将数据保存在服务器端

        ② 保存的数据更多。

        ③ 保存的数据类型更丰富。

 

    缺点:

        session会将状态保存在服务器端,会占用服务器大量的内存空间。

        cookie会将状态保存在客户端(浏览器),服务器不会保存任何状态。

你可能感兴趣的:(session)