客户端session与服务端session
关于HttpSession的误解实在是太多了,本来是一个很简单的问题,怎会搞的如此的复杂呢?下面说说我的理解吧:
1、HTTP协议本身是“连接-请求-应答-关闭连接”模式的,是一种无状态协议(HTTP只是一个传输协议);
2、Cookie规范是为了给HTTP增加状态跟踪用的(如果要精确把握,建议仔细阅读一下相关的RFC),但不是唯一的手段;
3、所谓Session,指的是客户端和服务端之间的一段交互过程的状态信息(数据);这个状态如何界定,生命期有多长,这是应用本身的事情;
4、
由于B/S计算模型中计算是在服务器端完成的,客户端只有简单的显示逻辑,所以,Session数据对客户端应该是透明的不可理解的并且应该受控于服务
端;Session数据要么保存到服务端(HttpSession),要么在客户端和服务端之间传递(Cookie或url
rewritting或Hidden input);
5、由于HTTP本身的无状态性,服务端无法知道客户端相继发来的请求是来自一个客户的,所以,当使用服务端HttpSession存储会话数据的时候客户端的每个请求都应该包含一个session的标识(sid, jsessionid 等等)来告诉服务端;
6、会话数据保存在服务端(如HttpSession)的好处是减少了HTTP请求的长度,提高了网络传输效率;客户端session信息存储则相反;
7、
客户端Session存储只有一个办法:cookie(url rewritting和hidden
input因为无法做到持久化,不算,只能作为交换session id的方式,即a method of session
tracking),而服务端做法大致也是一个道理:容器有个session管理器(如tomcat的
org.apache.catalina.session包里面的类),提供session的生命周期和持久化管理并提供访问session数据的
api;
8、使用服务端还是客户端session存储要看应用的实际情况的。一般来说不要求用户注册登录的公共服务系统(如google)采用
cookie做客户端session存储(如google的用户偏好设置),而有用户管理的系统则使用服务端存储。原因很显然:无需用户登录的系统唯一能
够标识用户的就是用户的电脑,换一台机器就不知道谁是谁了,服务端session存储根本不管用;而有用户管理的系统则可以通过用户id来管理用户个人数
据,从而提供任意复杂的个性化服务;
9、客户端和服务端的session存储在性能、安全性、跨站能力、编程方便性等方面都有一定的区别,而且优
劣并非绝对(譬如TheServerSide号称不使用HttpSession,所以性能好,这很显然:一个具有上亿的访问用户的系统,要在服务端数据库
中检索出用户的偏好信息显然是低效的,Session管理器不管用什么数据结构和算法都要耗费大量内存和CPU时间;而用cookie,则根本不用检索和
维护session数据,服务器可以做成无状态的,当然高效);
另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且
还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。这里只提示一下:以Ctrl+N或Shit+点击链接方式打开的IE窗口是运行在同一个进程空间
的,cookie数据在进程空间中是共享的,而双击桌面上的ie图标打开的是一个新的进程,会话级的cookie(未明确指定生存期的cookie)在新
的IE窗口里面是无法访问到的。
分享到:
相关推荐
在"OPC+UA客户端访问与服务端测试(C#)"这个主题中,我们将探讨如何使用C#编程语言来实现OPC UA客户端和服务器的交互。 首先,OPC UA客户端是连接到OPC UA服务器以获取或设置数据的应用程序。在C#中,可以使用.NET...
WebSocket是一种在客户端和服务器之间建立长连接...以上就是使用Java实现WebSocket客户端与服务端连接的关键知识点。实际应用中,还需要考虑异常处理、错误恢复、负载均衡、可扩展性等因素,确保系统的稳定性和可靠性。
8. **状态管理**:如果需要保持客户端与服务端之间的会话状态,可以使用Cookie或Session技术。 9. **RESTful API设计**:如果这是一个基于HTTP的交互,可能涉及RESTful架构原则,使得接口具有无状态、统一的调用...
2. 使用"DESCRIBE"请求,客户端请求服务器提供媒体流的描述,通常是一个SDP(Session Description Protocol)文件,包含了媒体类型、编码、速率等信息。 3. "SETUP"请求用于建立从服务器到客户端的数据传输通道,...
客户端与服务端的概念** 在任何网络通信中,客户端和服务端都是关键角色。客户端发起连接请求,而服务端接收并响应这些请求。在SuperSocket中,服务端通常是一个持续运行的程序,等待客户端连接,处理接收到的数据...
4. 注册SocketSession:在服务端启动时,注册WebSocketSession,这个类将处理客户端的连接请求,并实现数据收发的逻辑。 5. 处理客户端连接:当客户端连接到服务器时,SuperSocket会自动创建一个SocketSession对象...
6. **SESSION与JSON交互** - 使用Gson库,我们可以方便地将Java对象序列化为JSON格式,通过SSH通道发送到服务端,也可以接收服务端返回的JSON数据并反序列化。 - 注意JSON数据的编码应统一,避免出现乱码问题。 7...
本实例将探讨如何使用MINA实现客户端与服务端的通信。 MINA框架是Apache软件基金会的一个项目,它提供了基于NIO(Non-blocking I/O)的网络编程接口。NIO是一种在Java中实现高并发、低延迟I/O操作的方法,特别适合...
环境配置 开发环境配置为: JDK 8 IntelliJ IDEA 2020.1.2 x64 Springboot集成的Websocket ...在Spring内,WebSocket实例以WebSocketSession形式存在,每个session都代表了一个服务端与客户端的会话。
SuperSocket 提供了一个高效、灵活的平台,使得开发者可以快速构建Socket应用程序,尤其适合需要实现客户端与服务器之间实时通信的场景。通过以上步骤,你将能够成功地搭建一个基础的SuperSocket客户端和服务端,...
在Mina中,服务端通常使用Acceptor来监听连接,而客户端使用Session进行通信。 要实现Java客户端Socket与Mina服务端的通信,我们需要完成以下步骤: 1. **服务端配置**: - 引入Mina库:在项目中添加Mina的依赖。...
ActiveMQ 服务端配置与启动 首先,我们需要在服务器端安装并配置 ActiveMQ。通常,可以从官方网站下载最新版本的 ActiveMQ 并解压到指定目录。在解压后的 `bin` 目录下,有多个启动脚本,例如 `activemq start`...
实现双向通信,需要定义一个回调合同(Callback Contract),客户端需要实现这个回调合同,并通过WCF的实例化模式(如PerSession)确保服务端可以找到正确的回调对象。 **消息传递模式**:在WCF中,有多种消息交换...
在这个"ActiveMQ推送服务端和客户端完整案例"中,我们将探讨如何设置和使用ActiveMQ进行服务端与客户端之间的消息推送。 **1. 安装与配置ActiveMQ** 首先,你需要下载并安装ActiveMQ。这个案例中可能包含了安装包和...
在本文中,我们将深入探讨如何使用Qt的网络模块来实现HTTP客户端与服务器的通信,以及如何利用提供的代理设置。这个示例("qt使用network模块的http客户端与服务器的demo")展示了Qt库的强大功能,它允许开发者轻松...
1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样
本实例将探讨如何使用SuperSocket来实现服务端与客户端之间的通信。 首先,我们从服务端开始。SuperSocket服务端的核心是`ServerBootstrap`类,它负责启动服务器并管理所有客户端连接。开发者需要继承`AppServer`...
2. **定义协议**: 在SuperSocket中,你需要定义一个AppSession类,该类继承自`AppSession<TRequestInfo>`,用于处理客户端发来的数据包。TRequestInfo是你定义的协议解析类,用于解析接收到的数据。 3. **创建...
### WebSocket 区分不同客户端两种方法详解 #### 一、引言 在现代Web应用开发中,WebSocket技术因其能够实现实时双向通信的特点而被广泛应用于各种场景,尤其是在即时通讯领域。然而,随着应用场景的复杂化,如何...
Apache MINA(Multi-purpose ...通过学习和实践"mina及时推送客户端服务端实现"项目,开发者不仅能掌握MINA框架的基本用法,还能深入了解TCP长连接、实时推送的原理与实现,为构建高效、稳定的网络应用打下坚实基础。