`
Action-人生
  • 浏览: 105774 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Session与Cookie。禁用Cookie后Session会不会受影响?

阅读更多
http://digdeeply.org/archives/03251929.html
Session与Cookie。禁用Cookie后Session会不会受影响?

2012年3月25日 DigDeeply 跳到评论
  Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
  服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
  可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。
  来看一下,即使不写Cookie,通过chrome的开发者工具,也可以看到这么一组cookie的键值 {PHPSESSID : 3e23bc66d024af8b531f2adb192478af}。
Session与Cookie区别-禁用cookie会不会影响session?
Session与Cookie区别-禁用cookie会不会影响session?

  为什么会有cookie呢,大家应该知道,http是无状态的协议,客户每次读取web页面时,服务器都会去打开新的会话,而且服务器也不会自动维护客户的上下文信息(就是说你在这个页面存储的变量的值不会带到下一个页面去),那么要怎么才能实现网上商店中的购物车机制呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为PHPSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的PHPSESSIONID,我们通常情是看不到PHPSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到sessionid=3e23bc66d024af8b531f2adb192478af之类的字符串。
  明白了原理,我们就可以很容易的分辨出persistent cookies和session cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如session cookie安全了。
  正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于相应请求中包含的信息状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在这种关系维持的期间叫做会话(session)。
  Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。
  那么,在客户端禁用Cookie的时候,我们要怎么做呢,可以有以下两种方法

设置php.ini中的session.use_trans_sid = 1或者在PHP编译时打开–enable-trans-sid选项,让PHP自动通过URL传递session id。
如果是虚拟主机或者租用的服务器,无法去修改PHP.ini,那么可以手动通过URL传值,或者通过隐藏表单传递session id。说简单些就是自己去操纵sessionid这个唯一标识符,去鉴别用户即可。
分享到:
评论

相关推荐

    session与cookie的区别和联系?

    ### Session与Cookie的区别和联系 #### 一、概念解析 - **Cookie**:Cookie是一种小型的数据文件,由服务器端生成并发送给用户浏览器,浏览器在本地(如用户的硬盘)保存该文件,然后每一次请求同一网站时都会把该...

    asp.net的session和cookie的应用

    与Session不同,Cookie存储在客户端,这意味着它们可以在用户关闭和重新打开浏览器后仍然存在,但容量有限,一般不超过4KB。Cookie通常用于存储登录状态、用户首选项等不敏感信息。 创建Cookie也很直观,比如`...

    cookie和session

    ### Cookie与Session详解 在现代Web开发中,保持用户的会话状态是一项基本需求。通过Cookie与Session机制,服务器能够识别并处理用户的状态信息,从而实现更丰富的交互体验。本文将详细解析Cookie与Session的工作...

    session与cookie.doc的区别

    4. **依赖性**:Session依赖于Cookie,如果客户端禁用Cookie,服务器可以通过URL重写技术传递SessionID,但这样会对URL产生污染,用户体验可能下降。 5. **安全性**:由于Session数据存储在服务器,相对Cookie来说...

    session与cookie

    【Session与Cookie】是Web开发中两种常见的会话管理技术,它们主要负责在客户端和服务器之间维护用户状态。 **一、Cookie机制与Session机制的区别** 1. **Cookie机制**:Cookie是在客户端保持状态的方式,服务器将...

    Session、Cookie、Token的关系。以及Cookie的局限性

    4. 隐私问题:用户可以通过浏览器设置禁用或清除Cookie,影响用户体验。 5. 无状态:Cookie本身不携带任何状态信息,服务器需要依赖其他机制(如Session)来管理用户状态。 了解这些关系和局限性后,开发者可以...

    session和cookie详解

    ### Session与Cookie详解 #### 一、Session与Cookie的基本概念 **Session** 和 **Cookie** 是Web开发中用于保持客户端与服务器之间会话状态的重要技术。由于HTTP协议本身是无状态的,即服务器无法自动记录客户端的...

    cookie 和 session 保存的异同

    如果用户禁用了Cookie,那么Session跟踪将无法进行,除非采用URL重写等替代方法。 总结来说,Cookie和Session各有优缺点,Cookie适合存储少量、不敏感的数据,并且不需要服务器资源,而Session则适合存储更多、敏感...

    cookie机制和session机制的区别

    1. **安全性高**:因为敏感信息存储在服务器端,相对更安全,不会像Cookie那样容易受到跨站脚本攻击。 2. **容量大**:相比Cookie有限的大小限制,Session可以存储更多的数据量。 3. **跨页面保持状态**:即使用户在...

    Cookie与Session机制

    #### 四、何时使用Cookie,何时使用Session? 虽然Cookie和Session都可以用来跟踪用户会话,但它们各有优势和局限性。 - **使用Cookie**: - 适用于存储少量、不敏感的信息,比如用户偏好设置。 - 可以被浏览器...

    cookie与session多可爱的伙伴

    Session不依赖于Cookie,但通常为了方便实现,会借助Cookie来传递Session ID。 3. **自动登录实现**:当用户选择自动登录时,服务器会在Cookie中设置用户ID,下次用户访问时,服务器通过检查这个Cookie来识别用户,...

    Cookie与Session机制.doc

    Cookie 与 Session 机制 Cookie 机制是 Web 程序中常用的技术,用来跟踪用户的整个会话。Cookie 通过在客户端记录信息确定用户身份。下面是 Cookie 机制的详细说明: 1. 什么是 Cookie? Cookie 意为“甜饼”,是...

    session编程(包括禁用cookie的情况)

    在本文中,我们将深入探讨Session编程,特别是如何在禁用Cookie的情况下实现Session管理。 Cookie是一种小型文本文件,通常由服务器发送到用户的浏览器,并由浏览器在后续请求中返回给服务器,以此来维持会话状态。...

    session和cookie的区别

    - **存储大量数据**:与Cookie相比,Session可以在服务器端存储更多、更复杂的数据结构,而不受Cookie大小限制的影响。 #### 3. Session与Cookie的关系 尽管Session和Cookie看似独立,但它们之间存在密切联系。...

Global site tag (gtag.js) - Google Analytics