session和cookie理解

标题一、计算机网络理解cookie和session

  • cookie
    • 它是服务器发送到客户端浏览器中,一般携带着用户信息,浏览器可以储存它,并且把它与下一个请求一同发送到服务器,它可以用来判断两个请求是否来自同一个浏览器,它记录无状态的http协议有状态的信息。
    • 每个web站点的cookie不能超过20个,每个不能超过4KB。安全性无法的到保障。
  • session
    • 客户端请求服务器,服务器会开辟一段空间,存储session,存储结构为ConcurrentHashMap。服务器可以利用session存储客户端在同一个会话期间的一些操作记录。
    • 客户端第一个请求服务器会生成一个session,并生成唯一的sessionID,session具有声明周期,一般为半个小时或者浏览器关闭。

标题二、Servlet实列

标题session

  • session服务端的一个集合,可以存储任何东西,可以识别客户,每一个客户都有特定的id。
  • 第一次访问servlet时,服务器会为每一个客户创建一个session对象,并存入session集合,用session标识。
  • 一般把sessionID放入cookie中,随着客户端请求上传到服务器,如果服务器session集合中有这个sessionID,则客户端就可以直接获取这个这个session对象。
  • session是有保质期的,
    1、如果服务器的session一直没有被使用,服务器会查询session最后访问时间,如果这个时间超过了过期时间,服务器会销毁该session(默认时间为30分钟)。
    2、在关闭浏览器时,服务器也会销毁session,重新访问创建新的session对象。
public class SessionServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session对象
        HttpSession httpSession = request.getSession();
        //设置session的有效期
        httpSession.setMaxInactiveInterval(6);
        httpSession.setAttribute("username","zhangsan");
        //获取session中id
        String id = httpSession.getId();
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        System.out.println(id);
        writer.println("<h1>这就是你请求的id:"+id+"</h1>");
    }
}
   <servlet>
        <servlet-name>SessionServlet</servlet-name>
        <servlet-class>com.tdu.servlet.SessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionServlet</servlet-name>
        <url-pattern>/session</url-pattern>
    </servlet-mapping>

<!--    统一设置session的有效期 单位分钟-->
    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>

标题cookie

  • cookie是有web服务器生成,向浏览器发送的一小段ASCII文本,浏览器收到后,会保存在某个目录下的文本文件中。
  • 单个cookie最大不能超过4K
  • 一个站点最多只能读取20个cookie
  • 一个站点只能读取自己写的cookie
public class CookieServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建cookie
        Cookie cookie = new Cookie("lisi","person");
        Cookie cookie1 = new Cookie("xiaobao","camera");

        //设置cookie的有效期,单位秒
        cookie.setMaxAge(340);
        //写入到客户端
        //默认cookie都是临时的,浏览器关闭之前有效
        response.addCookie(cookie);
        response.addCookie(cookie1);
    }
}

public class ReadCookieServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取客户端存入的cookie
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie:cookies) {
            String name = cookie.getName();
            String value = cookie.getValue();
            System.out.println(name+" , "+value);
        }
    }
}
CookieServlet com.tdu.servlet.CookieServlet ReadCookieServlet com.tdu.servlet.ReadCookieServlet CookieServlet /cookie ReadCookieServlet /readCookie
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值