`
famoushz
  • 浏览: 2927689 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

对session和cookie的一些理解

阅读更多

由于项目需要,最近用session容器比较多,传载的同时加上了自己的一些理解,不足之处还请大家补充和纠正。

一、cookie机制和session机制的区别
*************************************************************************************
Cookie 是客户端的存储空间,由浏览器来维持。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方 案。同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的 目的,但实际上还有其他选择,比如说重写URL和隐藏表单域。

*************************************************************************************
二、会话cookie和持久cookie的区别
*************************************************************************************

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

如果设置了过期时间(setMaxAge(60*60*24)), 浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同 的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。(在IE下测试通过)

*************************************************************************************
三、如何利用实现自动登录
*************************************************************************************

当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户务需给出明确的用户名和密码,就可以访问服务器上的资源。

*************************************************************************************
四、如何根据用户的爱好定制站点
*************************************************************************************

网站可以使用cookie记录用户的意愿。对于简单的设置,网站可以直接将页面的设置存储在cookie中完成定制。然而对于更复杂的定制,网站只需仅将一个惟一的标识符发送给用户,由服务器端的数据库存储每个标识符对应的页面设置。

*************************************************************************************
五、cookie的发送
*************************************************************************************

1.创建Cookie对象
2.设置最大时效
3.将Cookie放入到HTTP响应报头

如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie:存储在浏览器的内存中(服务器自动创建一个cookie并将jsessionId作为key,sessionId的值作为value发送到客户端浏览器内存中),用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。 发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请 求报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非 setCookie。同样要记住响应报头必须在任何文档内容发送到客户端之前设置。


*************************************************************************************
七、如何使用cookie检测初访者
*************************************************************************************

A.调用HttpServletRequest.getCookies()获取Cookie数组
B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确
C.如果是则退出循环并设置区别标识
D.根据区别标识判断用户是否为初访者从而进行不同的操作

*************************************************************************************
八、使用cookie检测初访者的常见错误
*************************************************************************************

不 能仅仅因为cookie数组中不存在在特定的数据项就认为用户是个初访者。如果cookie数组为null,客户可能是一个初访者,也可能是由于用户将 cookie删除或禁用造成的结果。但是,如果数组非null,也不过是显示客户曾经到过你的网站或域,并不能说明他们曾经访问过你的servlet。其 它servlet、JSP页面以及非Java Web应用都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给用户的浏览器。

正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。

*************************************************************************************
九、使用cookie属性的注意问题
*************************************************************************************

属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。

因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。因而不要期望通过request.getCookies得到的cookie中可以使用这个属性。这意味着,你不能仅仅通过设置cookie的最大时效,发出它,在随后的输入数组中查找适当的cookie,读取它的值,修改它并将它存Cookie,从而实现不断改变的cookie值

*************************************************************************************
十、如何使用cookie记录各个用户的访问计数
*************************************************************************************

1.获取cookie数组中专门用于统计用户访问次数的cookie的值
2.将值转换成int型
3.将值加1并用原来的名称重新创建一个Cookie对象
4.重新设置最大时效
5.将新的cookie输出

*************************************************************************************
十一、session在不同环境下的不同含义
*************************************************************************************

session, 中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 session。然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义。

session在Web开发环境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器端之间保持状态的解决方案。有时候Session也用来指这种解决方案的存储结构。

*************************************************************************************
十二、session的机制
*************************************************************************************

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存息。

但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。如果客户请求不包含session id,则为此客户创建一个session并且同时生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。

*************************************************************************************
十三、保存session id的几种方式
*************************************************************************************

A.保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
B. 由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终 保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。(IE6.0除外)
C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

*************************************************************************************
十四、session什么时候被创建
*************************************************************************************

一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建。

注意如果JSP没有显示的使用 <!---->关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。

由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。

*************************************************************************************
十五、session何时被删除
*************************************************************************************

session在下列情况下被删除:
A.程序调用HttpSession.invalidate()
B.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
C.服务器进程被停止

再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效,除非此时Server端刚好session失效时间到了。

*************************************************************************************
十六、URL重写有什么缺点
*************************************************************************************

对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。

这 意味着在你的站点上不能有任何静态的HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用servlet或 JSP动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息- 该URL后面的SESSION ID已经过期了。

*************************************************************************************
十七、使用隐藏的表单域有什么缺点
*************************************************************************************

仅当每个页面都是有表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。

*************************************************************************************
十八、会话跟踪的基本步骤
*************************************************************************************

1.访问与当前请求相关的会话对象
2.查找与会话相关的信息
3.存储会话信息
4.废弃会话数据

分享到:
评论
1 楼 白浪滔天 2007-09-25  
总结的很好嘛 ~~

相关推荐

    对session和cookie的深刻理解

    ### 对Session和Cookie的深刻理解 #### Session与Cookie的基本概念 在Web开发中,了解Session和Cookie是非常重要的,因为它们是实现用户会话管理和状态跟踪的关键技术。简单来说,Session和Cookie都用于存储用户...

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

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

    session与cookie的区别和联系?

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

    flask-session-cookie-manager-master.zip

    首先,我们来深入理解session和cookie的概念。在Web应用中,用户认证通常依赖于session和cookie。cookie是服务器发送到用户浏览器并存储在本地的一小块数据,用于跟踪用户状态。而session则是一种在服务器端存储用户...

    TP5 Session和Cookie

    标题中的“TP5 Session和Cookie”指的是在PHP的ThinkPHP5框架中关于用户会话管理和Web身份验证的两个核心概念。...理解并熟练运用Session和Cookie,对于提升ThinkPHP5项目的安全性和用户体验至关重要。

    flask、session、cookie解加密脚本

    本文将深入探讨`Flask`中的`session`和`cookie`,以及如何对它们进行解密。 首先,`session`和`cookie`都是用于跟踪用户状态的方法。`cookie`通常存储在用户的浏览器中,而`session`数据则保存在服务器端。`cookie`...

    asp.net的session和cookie的应用

    ASP.NET的Session和Cookie是Web开发中的两种关键的用户状态管理技术。它们允许开发者存储和检索用户特定的信息,从而提供个性化的用户体验。了解并熟练掌握这两者,对于任何ASP.NET Web应用程序的开发者来说都至关...

    SpringSession同时支持Cookie和header策略

    总的来说,SpringSession通过`CookieHeaderHttpSessionStrategy.java`这类策略类,实现了对Cookie和header两种方式的灵活支持,从而在分布式系统中提供了健壮的session管理解决方案。理解并掌握这些概念和代码细节...

    经典收藏Cookie和Session

    通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...

    cookie和session示例

    在Web开发中,Cookie和Session是两种非常重要的用户状态管理机制。它们被广泛用于跟踪用户的登录状态、个性化设置等,确保用户在不同页面之间切换...学习和掌握Cookie和Session的相关知识,对提升Web开发能力至关重要。

    c#实现cookie和session的登陆实例

    在Web开发中,Cookie和Session是两种常见的用户身份验证...通过以上讲解,你应该对C#中如何使用Cookie和Session进行登录实现了深入的理解。实际项目中,应根据需求选择适合的用户认证方法,并确保遵循最佳安全实践。

    关于session与cookie的原理简述

    【Session与Cookie原理...理解并熟练掌握Session和Cookie的使用,能够帮助开发者构建更安全、高效的应用。在实际应用中,通常会结合两者,利用Cookie存储Session ID,而Session用于存储敏感数据,以兼顾安全和性能。

    Cookie与Session深入剖析图示

    下面将对Cookie和Session进行深入剖析。 首先,Cookie是服务器发送到用户浏览器并存储在本地的一小块数据,通常包含一个唯一的标识符、有效期以及服务器指定的一些数据。当用户再次访问同一网站时,浏览器会自动将...

    深入理解session,cookie

    在这个场景下,Cookie和Session成为了关键的角色。接下来,我们将深入探讨这两种技术的工作原理及其在Servlet和JSP中的应用。 首先,我们来看Cookie。Cookie是由服务器端创建并在HTTP响应头中发送到客户端(通常是...

    session、cookie的跨域共享

    该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对session、cookie的理解...

    session和cookie1

    总的来说,Session和Cookie各有优缺点,选择使用哪种取决于应用场景的需求,如安全性、性能、数据量以及对用户隐私的考虑。理解它们的工作原理和差异,有助于开发者更好地设计和优化Web应用程序。

    一次搞明白 Session、Cookie、Token,面试问题全搞定.pdf

    从描述中可以知道,文档的目标是帮助应聘者在面试过程中对Session、Cookie、Token有一个全面的了解,确保他们能够自信地回答面试官的问题,避免面试中遇到相关问题时感到困惑或不自信。 在标签"面试 php session ...

    session和cookie的区别

    理解Cookie和Session的区别有助于开发者选择合适的方法来处理用户状态,平衡性能和安全性。在实际应用中,通常结合使用两者,例如使用Cookie存储非敏感的用户偏好,而用Session存储登录状态等敏感信息。

    JavaWeb基础-Cookie和Session的简单使用案例

    总结起来,Cookie和Session是JavaWeb开发中重要的用户会话管理工具,理解它们的工作原理和应用场景,对于构建高效、安全的Web应用至关重要。通过实际的登录案例,我们可以直观地看到如何在项目中运用这两种技术,以...

Global site tag (gtag.js) - Google Analytics