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数据,服务器可以做成无状态的,当然高效);
分享到:
相关推荐
在探讨“IFrame中Session丢失的解决办法”这一主题时,我们首先需要理解Session与IFrame的基本概念及其在Web开发中的交互方式。Session是Web应用中用于存储用户特定信息的一种机制,它允许开发者在用户的会话期间...
这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是Web安全的核心机制,防止恶意网站通过脚本访问其他网站的敏感数据。然而,这在某些场景下会带来不便...
【PHP中的Session完全教程】 PHP中的Session是一种存储用户状态数据的方法,它允许你在多个页面间保持用户信息。Session是Web开发中的重要概念,因为它解决了HTTP协议无状态的特性,即服务器无法识别同一个用户在...
Session通过在服务器端维护一个与客户端相关的会话状态,而不是完全依赖客户端的Cookie。在客户端首次访问服务器时,服务器会创建一个新的Session,并分配一个唯一的Session ID给这个会话。这个Session ID通常会被...
若要完全结束Session,需调用`session_destroy()`。 4. **检查Session状态**:`session_status()`函数可以检查当前的Session状态,返回值为`PHP_SESSION_DISABLED`、`PHP_SESSION_NONE`或`PHP_SESSION_ACTIVE`。 ...
通过token,用户状态的验证完全转移到了客户端,服务器只需要验证token的有效性,从而解决了session管理的扩展性问题。 在安全性方面,token使用了签名算法,确保了其不会被篡改。例如使用HMAC-SHA256算法对token...
若要完全结束会话,应使用`session_destroy()`或通过设置Cookie中的Session ID为无效值,以断开页面间的会话联系。 总的来说,Cookie适合存储非敏感的小量数据,如用户偏好设置,而Session更适合存储大量或敏感数据...
要完全结束,需要先清空Session变量再销毁。 3. **Session与Cookie的区别** - Session数据存储在服务器,而Cookie数据存储在客户端。 - Session安全性更高,因为数据不在用户浏览器中可见,但可能导致服务器资源...
首先,理解cookie的产生背景。由于HTTP协议是无状态的,服务器无法记住两次请求之间的关联,为了解决这个问题,cookie应运而生。cookie存储在客户端(用户的浏览器)中,由服务器发送给客户端,并在后续请求时由...
为了更好地理解不同Session模式之间的区别,下面列出了一张表格来展示它们各自的特点: | 模式 | 客户端Cookie要求 | 数据类型支持 | 数据存储方式 | WEB服务器依赖性 | 可扩展性 | 故障转移能力 | 灾难恢复 | | --...
在软件开发中,理解和正确使用Cookie至关重要。以下是对Cookie的详细解释: 1. **Cookie的工作原理**: 当用户访问一个网站时,服务器可能会在响应中包含Set-Cookie头部,向客户端(通常是浏览器)发送一个Cookie...
《深入理解Memcached Session Manager 1.6.5》 Memcached Session Manager 1.6.5是一款专门用于处理Web应用程序中的用户会话管理的工具,它基于Java平台,利用了高效的分布式缓存系统——Memcached。在Java Web开发...
【会话(Session)的基本...总的来说,理解并有效使用Session是Web开发中的重要技能,它对于构建动态、交互性强的网站有着至关重要的作用。通过合理设置和管理Session,可以提升用户体验,同时确保应用的安全性和效率。
2. **资源消耗**:Cookie的处理完全在客户端完成,不占用服务器资源,这对于高流量的网站尤其有利。 3. **跨页面通信**:Cookie可以在页面之间传递信息,这对于维持用户会话状态非常有用。 接下来,我们将探讨...
而如果要完全结束Session,就用`session_destroy()`,同时别忘了处理Session Cookie。 总之,理解和正确使用这些Session管理函数对于编写健壮的PHP应用程序至关重要。了解这些方法可以帮助你更有效地控制用户的会话...
其他如 `session.cookie_lifetime`, `session.cookie_path`, `session.cookie_domain` 等则涉及cookie的设置。`session.gc_probability` 和 `session.gc_maxlifetime` 控制session垃圾回收机制,决定何时清理过期的...
至于为什么会在面试中问这个问题,原因可能包括:检验面试者的基础知识,理解Session和Cookie之间的区别,以及他们是否了解PHP的Session回收机制。在实际应用中,30分钟的过期时间可能是为了实现诸如限时优惠券这样...
如果要完全结束一个Session,可以调用`session_destroy()`函数: ```php session_start(); session_unset(); session_destroy(); ``` 这样不仅清除了所有Session变量,还会删除服务器上对应的Session文件,结束...
Laravel使用一个中间件来管理session,它会将session存储在用户浏览器的cookie中,或者保存在服务器上的文件、数据库或其他存储方案中。当开发者无法获取session时,可能是因为session的启动、保存或管理出现了问题...