`

转: Session与Cookie的比较

阅读更多
Session与Cookie的比较 2010-06-23 18:45:34
分类: Java
Cookie与Session都可以进行会话跟踪,但是实现的原理不太一样。一般情况下二者均可以满足需求,但有时候不可以使用Cookie,有时候不可以使用Session。下面通过比较说明二者的特点以及适用的场合。
1 . 从存取方式上比较
Cookie中只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8,GBK或者BASE64等方式的编码。Cookie中也不能直接存取Java对象。若要存储稍微复杂的信息,使用Cookie是比较困难的。
而Session中可以存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也可以直接保存Java Bean乃至任何Java类,对象等,使用起来非常方便。可以把Session看做是一个Java容器类。
2 .隐私安全上比较
Cookie存储在客户端浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制甚至修改Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的危险。
如果选用Cookie,比较好的办法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只有自己能读得懂。而如果选择Session就省事多了,反正是放在服务器上,Session里任何隐私都可以。
3. 从有效期上比较
使用过Google的人都知道,如果登录过Google,则Google的登录消息长期有效。用户不必每次访问都重新登录,Google会长久地记录该用户的登录信息。要达到这种效果,使用Cookie会是比较好的选择。只需要设置Cookie的maxAge属性为一个很大很大的数字或者Integer.MAX_VALUE就可以了。Cookie的maxAge属性支持这样的效果。
使用Session理论上也能实现这种效果。只要调用方法setMaxInactiveInterval(Integer. MAX_VALUE)不就可以了么。但是由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的maxAge默认为–1,只要关闭了浏览器该Session就会失效,因此Session不能实现信息永久有效的效果。使用URL地址重写也不能实现。
而且如果设置Session的超时时间过长,服务器累计的Session就会越多,越容易导致内存溢出。
4. 从对服务器的负担上比较
Session是保存在服务器端的,每个用户都会产生一个Session。如果并发访问的用户非常多,会产生非常多的Session,消耗大量的内存。因此像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能使用Session来追踪客户会话的。
而Cookie保存在客户端,不占用服务器资源。如果并发浏览的用户非常多,Cookie是很好的选择。对于Google、Baidu、Sina来说,Cookie也许是唯一的选择。
5 .从浏览器支持上比较
Cookie是需要客户端浏览器支持的。如果客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。对于WAP上的应用,常规的Cookie就派不上用场了。
如果客户端浏览器不支持Cookie,需要使用Session以及URL地址重写。需要注意的是所有的用到Session程序的URL都要使用response.encodeURL(String URL)或者response.encodeRedirectURL(String URL)进行URL地址重写,否则导致Session会话跟踪失败。对于WAP应用来说,Session+URL地址重写也许是它唯一的选择。
如果客户端支持Cookie,则Cookie既可以设为本浏览器窗口以及子窗口内有效(把maxAge设为–1),也可以设为所有浏览器窗口内有效(把maxAge设为某个大于0的整数)。但Session只能在本浏览器窗口以及其子窗口内有效。如果两个浏览器窗口互不相干,它们将使用两个不同的Session。
6. 从跨域名上比较
Cookie支持跨域名访问,例如将domain属性设置为“.helloweenvsfei.com”,则以“.helloweenvsfei.com”为后缀的所有域名均可以访问该Cookie。跨域名Cookie现在被广泛用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
%注意:仅使用Cookie或者仅使用Session可能实现不了理想的效果。这时应该尝试一下同时使用Cookie与Session。Cookie与Session的搭配使用在实际项目中会实现绚烂多姿的效果。


概括:
1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。
2、session中保存的是对象,cookie中保存的是字符串。
3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
4、session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。
分享到:
评论

相关推荐

    6.4: Session与Cookie 、 部署memcached 、 Session共享 、 .docx

    总结,理解Session与Cookie的区别、部署Memcached实现Session共享,以及如何在Linux环境中配置LNMP服务器是Web开发和运维中的重要技能。在实际应用中,需要根据业务需求选择合适的技术,并优化配置,确保系统的稳定...

    session与cookie的区别和联系?

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

    j2ee实验二:学习使用Session和Cookie

    ### j2ee实验二:学习使用Session和Cookie #### 实验背景与目标 在现代Web应用开发中,理解和掌握会话管理和用户认证是至关重要的。本实验旨在通过一系列实际操作来帮助学生熟悉J2EE环境下Session和Cookie的工作...

    JAVA之cookie与session

    ### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种在 Web 开发中用于跟踪用户会话的重要技术。它们的主要目标是在客户端和服务端之间保持状态。 - **Cookie** 机制...

    session与cookie.doc的区别

    Session和Cookie是两种常见的Web应用程序中用于管理用户会话的技术,它们主要的区别在于存储位置、生命周期和安全性。 **Session** 1. **存储位置**:Session是服务器端存储机制,它在服务器上为每个用户开辟一块...

    flask-session-cookie-manager

    标题“flask-session-cookie-manager”指的是一个Python应用,它专门针对Flask框架,用于管理和操作session cookie。在Web开发中,session cookie是服务器用来跟踪用户状态的一种方式,特别是在无状态的HTTP协议上...

    关于session与cookie的原理简述

    【Session与Cookie原理简述】 Session和Cookie是两种在Web开发中常见的用户状态管理机制,它们主要用于在HTTP协议无状态的特性下跟踪用户状态。理解它们的原理对于编写高效的Web应用至关重要。 **Cookie原理** ...

    Cookie、Session和Token三者的区别及使用

    - Cookie: 单个Cookie大小受限(约4KB),每个域名最多20个Cookie。 - Session: 通常没有大小限制。 - **应用场景**: - Cookie: 适用于存储少量非敏感信息,如用户偏好设置。 - Session: 更适合存储敏感信息,如...

    经典收藏Cookie和Session

    ### 经典收藏:Cookie与Session机制详解 #### 一、Cookie机制与Session机制的区别 在Web开发中,为了维持用户的会话状态,通常有两种常用的技术:Cookie与Session。这两种技术各有特点,适用于不同的场景。 - **...

    flask-session-cookie-manager-master.zip

    本项目“flask-session-cookie-manager-master.zip”显然是一款针对Flask Web框架的session管理工具,它专注于session的加密与解密。Flask是一个轻量级的Python Web服务器网关接口(WSGI)应用框架,广泛用于快速...

    session 和cookie 区别

    标题与描述中的关键词“session和cookie区别”指向了两种在Web开发中常用的状态管理技术,它们各自具有独特的特性和用途。下面将详细阐述这两种技术的关键知识点: ### session和cookie的区别 **1. 定义与存储位置...

    PHP Cookie:Session详解.md

    ### PHP Cookie 与 Session 详解 #### 一、PHP Cookie **1. Cookie 的基本概念** - **名称和值**:每个 Cookie 都有一个名称和一个值,名称用于唯一标识该 Cookie,而值则用来存储信息。例如,可以通过设置一个...

    session与cookie的区别以及配置使用

    ### Session与Cookie的区别及配置使用 #### 一、概述 在Web开发中,尤其是在使用PHP进行后端开发时,为了实现用户状态管理、个性化设置等功能,开发者常常需要使用到两种技术:Session 和 Cookie。这两种技术虽然...

    flask、session、cookie解加密脚本

    在提供的`flask_session_cookie_manager3.py`和`flask_session_cookie_manager2.py`文件中,可能包含了实现这个过程的代码。这些脚本可能用来检查或调试`Flask`应用的`session`和`cookie`管理,或者用于演示如何手动...

    Session&Cookie;.rar

    在Web开发中,Session和...了解和熟练运用Session与Cookie,对于提高网站用户体验和安全性至关重要。在实际项目中,通常结合两者使用,以达到最佳效果。在编程时,还需注意隐私政策和数据保护,确保用户数据的安全。

    cookie和session示例

    在Python的Flask框架中,可以使用`set_cookie`方法设置Cookie: ```python from flask import Flask, make_response app = Flask(__name__) @app.route('/') def index(): response = make_response('Hello...

    session实质就是cookie

    ### Session与Cookie关系详解 #### 一、会话管理概览 在Web开发中,会话管理是一项重要的技术,它负责维护用户与服务器之间交互的数据。通常,这种交互包括用户的登录状态、购物车中的商品信息等。为了实现这些...

    session&cookie.zip

    3. **Session与Cookie的区别** - **存储位置**:Cookie存储在客户端,Session存储在服务器端。 - **安全性**:Session比Cookie更安全,因为数据不在客户端暴露。 - **容量限制**:Cookie大小有限制(一般4KB),...

    PHP会话控制:Session与Cookie详解

    **Cookie与Session的区别与联系**: 1. 存储位置:Cookie存储在客户端,而Session数据存储在服务器。 2. 安全性:Session数据比Cookie更安全,因为它们不会被直接暴露给用户。 3. 存储量:Session可以存储大量数据,...

Global site tag (gtag.js) - Google Analytics