客户端和服务器端交互之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
- 客户端和服务器端交互之session
- 浅析Java web程序之客户端和服务器端交互原理
- 浅析Java web程序之客户端和服务器端交互原理
- 浅析Java web程序之客户端和服务器端交互原理
- 浅析Java web程序之客户端和服务器端交互原理
- 浅析Java web程序之客户端和服务器端交互原理
- 浅析Java web程序之客户端和服务器端交互原理
- 浅析Java web程序之客户端和服务器端交互原理
- Web客户端和服务器端事件交互问题
- Android客户端和服务器端数据交互
- android客户端与服务器端交互 如何保持session
- android客户端与服务器端交互 如何保持session
- android客户端调用接口与服务器端交互 如何保持session
- android客户端与服务器端交互 如何保持session
- android客户端与服务器端交互 如何保持session
- android客户端与服务器端交互 如何保持session
- Android客户端与服务器端交互 如何保持session
- Android客户端与服务器端交互,如何保持session回话
- NSArry基本用法
- Linux个性化命令行登陆提示文字
- 安装windows2008系统的心得
- Android 屏幕适配方案
- JAVA之 jdk 的配置
- 客户端和服务器端交互之session
- 我的网页搭建中篇01——网页背景02.使用渐变色做网页背景
- 已知先序中序序列求后序序列
- MySQL特殊函数
- Android动画学习笔记-Android Animation
- 数组排序和集合排序的使用
- 网络监听器
- Caffe代码结构初识
- 关于EnumerateObjectsUsingBlock和for-in之间的较量