客户端和服务器端交互之session

来源:互联网 发布:用c语言编写计算器程序 编辑:程序博客网 时间:2024/06/05 00:10

概述:

         之前一直认为浏览器客户端和服务器端servlet交互是建立在session(回话)基础上的,实则不然,只有服务器端servlet显示声明session对象才有会话的创建。

客户端在第一次请求服务器端时,servlet被加载到服务器容器,创建出servlet对象。

        在涉及session创建的情况下,客户端第一请求服务器端时在服务器端创建session对象,session对象有一个唯一标识的sessionId,服务器端把这个sessionId放在相应头中的cookie中相应给客户端,同一客户端第二次请求服务器端时把请求地址(ip地址或域名,不包括详细url)对应的cookie放到请求头中向服务器端请求,服务器端检测是否有与客户端传来的cookie对应的sessionId,如果有,则接入对应会话,处理完成后向客户端相应(此次及以后响应头中都没有sessionId),如果没有没有匹配的sessionId则创建session对象,再把sessionId放到响应头中传给客户端。

        在不涉及session创建的情况下,每一个请求在服务器端是没有太大区别的,不同客户端的概念被弱化了,(在不经过特殊处理的情况下)所有请求共享所有数据,服务器端和客户端也不存在sessionId匹配的概念。


实践:

有session创建情况:


服务器端代码:

package com.sunsharing.servlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.io.OutputStream;/** * Created by baich on 2016/1/23. */public class TheadServletTest extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        HttpSession session = request.getSession();        //ServletContext context = this.getServletContext();        //context.setAttribute("d", "ddddd");        OutputStream out = response.getOutputStream();                out.flush();        out.close();    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}

客户端请求结果:


第一次访问响应头中以cookie的形式回传sessionId(JSESSIONID)

无session创建情况:

服务器端代码:

package com.sunsharing.servlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.io.OutputStream;/** * Created by baich on 2016/1/23. */public class TheadServletTest extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        //HttpSession session = request.getSession();        //ServletContext context = this.getServletContext();        //context.setAttribute("d", "ddddd");        OutputStream out = response.getOutputStream();        out.flush();        out.close();    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}

客户端请求结果:

无cookie(sessionId)在客户端和服务器端间传递和匹配验证


0 0
原创粉丝点击