session学习-实现访问计数

浏览器访问Web服务器时,服务器会为每一个浏览器在服务端的内存中分配空间,单独创建一个Session对象,该对象有一个ID属性,其值唯一,一般称为sessionID,并且服务器会将这个sessionID(使用Cookie的方式)发送给浏览器;浏览器再次访问服务器时,会将sessionID发送给服务器,服务器可以依据sessionID找到对应的session对象.

以下是本文的目录大纲:
1、session 工作原理
2、如何获得session
3、如何使用session绑定对象
4、实例:使用session实现访问技术

若有不正之处,请批评指正,不胜感激。
若转载请标明原文链接:
session学习-实现访问计数

1、session 工作原理
session学习-实现访问计数_第1张图片

2、如何获得session

HttpSession session = request.getSession(boolean flag);
注:

  • HttpSession是个借口,后面返回的是符合接口规范的对象
  • 当flag为true时:先查看请求中有没有sesssionID,如果没有sessionID,服务器创建一个session对象;如果有sessionID,依据sessionID查找对应session对象,找到则返回,找不到则创建一个新的session对象,所以flag为true时,一定能得到一个session对象
  • 当flag为false时,没有sessionID及有sessionID但没有找到session对象,均返回null;找到则返回。

HttpSession session = request.getSession();
等价于request.getSession(true);

3、如何使用session绑定对象

绑定对象:

void session.setAttribute(String name,Object obj);

获取绑定对象:

Object session.getAttribute(String name);

移除绑定对象:

void session.removeAttribute(String name);

注:getAttribute方法的返回值是Object类型,在去除数据时要对其进行数据类型转换,且必须与我们存入的数据类型一致

4、实例:使用session实现访问技术

  • 问题

记录不同客户端访问服务器的次数

  • 方案

由于对不同的客户端需要区分,所以使用session记录不同客户端的数据。由于访问次数需要保留,所以使用setAttribute方法进行记录。第一次访问时存储为1,后续访问在此基础上自增。

  • 步骤

step1 :新建CountServlet

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CountServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //获取session对象
        HttpSession session = request.getSession();
        //输出sessionID
        System.out.println(session.getId());
        //获取绑定的计数器
        Integer count=(Integer) session.getAttribute("count");
        if(count==null){
            count=1;
        }else{
            count++;
        }
        //在session中绑定计数器
        session.setAttribute("count", count);
        //输出提示信息
        out.println("这是第"+count+"次访问");
        out.close();
    }

}

step2:配置web.xml

<servlet>
    <servlet-name>CountServlet</servlet-name>
    <servlet-class>web.CountServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>CountServlet</servlet-name>
    <url-pattern>/count</url-pattern>
  </servlet-mapping>    

step3:部署,访问
session学习-实现访问计数_第2张图片

查看控制台输出窗口:
session学习-实现访问计数_第3张图片

*结论:
sessionID跟随一次会话,存储在客户端浏览器的内存中的Cookie里面。第一次创建后,只要不关闭浏览器,那么每一次的请求sessionID都会被自动发送到服务器端。重启浏览器后,sessionID会被销毁,重新创建新的数值。另外,及时打开多个同一个浏览器,sessionID不改变,计数会累加。*

如果有哪位朋友有补充的内容,欢迎下方留言,不胜感激。

你可能感兴趣的:(session,cookie,访问计数)