请问下面的cookie解析工具怎么解?

会话(Session)跟踪是Web程序中常用的技術用来跟踪用户的整个会话。常用的会话跟踪技术是cookie解析工具与Sessioncookie解析工具通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份

本章将系统地讲述cookie解析工具与Session机制,并比较说明什么时候不能用cookie解析工具什么时候不能用Session。

与网站同属于Google但是域洺不一样,二者同样不能互相操作彼此的cookie解析工具

注意:用户登录网站之后会发现访问时登录信息仍然有效,而普通的cookie解析工具是做不箌的这是因为Google做了特殊处理。本章后面也会对cookie解析工具做类似的处理

”,则所有以“颁发的cookie解析工具不会被提交到域名去这是由cookie解析工具的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的cookie解析工具

如果加密规则正确, 则视为已经登录

登录时可以選择登录信息的有效期:关闭浏览器即失效、30天内有效与永久有效。通过设置cookie解析工具的age属性来实现注意观察代码。运行效果如图1.7所示

提示:该加密机制中最重要的部分为算法与密钥。由于MD1算法的不可逆性即使用户知道了账号与加密后的字符串,也不可能解密得到密鑰因此,只要保管好密钥与算法该机制就是安全的。

除了使用cookie解析工具Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用嘚一种记录客户端状态的机制使用上比cookie解析工具简单一些,相应的也增加了服务器的存储压力

Session是另一种记录客户状态的机制,不同的昰cookie解析工具保存在客户端浏览器中而Session保存在服务器上。客户端浏览器访问服务器的时候服务器把客户端信息以某种形式记录在服务器仩。这就是Session客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

如果说cookie解析工具机制是通过检查客户身上的“通行证”來确定客户身份的话那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案愙户来访的时候只需要查询客户档案表就可以了。

Session对应的类为javax.servlet.http.HttpSession类每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里Session对象是在客户端第一次请求服务器的时候创建的

登录界面验证用户登录信息如果登录正确,就把用户信息以及登录时间保存进Session然後转到欢迎页面welcome.jsp。welcome.jsp中从Session中获取信息并将用户资料显示出来。

程序运行效果如图1.8所示


注意程序中Session中直接保存了Person类对象与Date类对象,使用起來要比cookie解析工具方便

当多个客户端执行程序时,服务器会保存多个客户端的Session获取Session的时候也不需要声明获取谁的Session。Session机制决定了当前客户呮会获取到自己的Session而不会获取到别人的Session。各客户的Session也彼此独立互不可见

提示Session的使用比cookie解析工具方便但是过多的Session存储在服务器内存中,会对服务器造成压力

Session保存在服务器端。为了获得更高的存取速度服务器一般把Session放在内存里。每个用户都会有一个独立的Session如果Session內容过于复杂,当大量客户访问服务器时可能会导致内存溢出因此,Session里的信息应该尽量精简

Session生成后,只要用户继续访问服务器就会哽新Session的最后访问时间,并维护该Session用户每访问服务器一次,无论是否读写Session服务器都认为该用户的Session“活跃(active)”了一次。

由于会有越来越哆的用户访问服务器因此Session也会越来越多。为防止内存溢出服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间如果超过了超时时间没访问过服务器,Session就自动失效了

Session中包括各种方法,使用起来要比cookie解析工具方便得多Session的常用方法如表1.2所示。

返回Session中存茬的属性名

返回Session的ID该ID由服务器自动创建,不会重复

返回Session的最后活跃时间返回类型为long

返回Session的超时时间。单位为秒超过该时间没有访问,服务器认为该Session失效

设置Session的超时时间单位为秒

返回该Session是否是新创建的

虽然Session保存在服务器,对客户端是透明的它的正常运行仍然需要客戶端浏览器的支持。这是因为Session 需要使用cookie解析工具作为识别标志HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户因此服务器向客戶端浏览器发送一

该cookie解析工具为服务器自动生成的,它的maxAge属性一般为–1表示仅当前浏览器内有效,并且各浏览器窗口间不共享关闭浏覽器就会失效。

因此同一机器的两个浏览器窗口访问服务器时会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(吔就是说不是双击桌面浏览器图标等打开的窗口)除外这类子窗口会共享父窗口的cookie解析工具,因此会共享一个Session

注意:新开的浏览器窗ロ会生成新的Session,但子窗口除外子窗口会共用父窗口的Session。例如在链接上右击,在弹出的快捷菜单中选择“在新窗口中打开”时子窗口便可以访问父窗口的Session。

如果客户端浏览器将cookie解析工具功能禁用或者不支持cookie解析工具怎么办?例如绝大多数的手机浏览器都不支持cookie解析笁具。Java Web提供了另一种解决方案:URL地址重写

该方法会自动判断客户端是否支持cookie解析工具。如果客户端支持cookie解析工具会将URL原封不动地输出來。如果客户端不支持cookie解析工具则会将用户Session的id重写到URL中。重写后的输出可能是这样的:

即在文件名的后面在URL参数的前面添加了字符串“;jsessionid=XXX”。其中XXX为Session的 id分析一下可以知道,增添的jsessionid字符串既不会影响请求的文件名也不会影响提交的地址栏参数。用户单击这个链接的时候會把 Session的id通过URL提交到服务器上服务器通过解析URL地址获得Session的id。

如果是页面重定向(Redirection)URL地址重写可以这样写:

对于WAP程序,由于大部分的手机瀏览器都不支持cookie解析工具WAP程序都会采用URL地址重写来跟踪用户会话。比如用友集团的移动商街等

注意:TOMCAT判断客户端浏览器是否支持cookie解析笁具的依据是请求中是否含有cookie解析工具。尽管客户端可能会支持cookie解析工具但是由于第一次请求时不会携带任何cookie解析工具(因为并无任何cookie解析工具可以携带),URL地址重写后的地址中仍然会带有jsessionid当第二次访问时服务器已经在浏览器中写入cookie解析工具了,因此URL地址重写后的地址Φ就不会带有jsessionid了

既然WAP上大部分的客户浏览器都不支持cookie解析工具,索性禁止Session使用cookie解析工具统一使用URL地址重写会更好一些。Java Web规范支持通过配置的方式禁用cookie解析工具下面举例说一下怎样通过配置禁止使用cookie解析工具。

打开项目sessionWeb的WebRoot目录下的META-INF文件夹(跟WEB-INF文件夹同级如果没有则创建),打开context.xml(如果没有则创建)编辑内容如下:

部署后TOMCAT便不会自动生成名JSESSIONID的cookie解析工具,Session也不会以cookie解析工具为识别标志而仅仅以重写后嘚URL地址为识别标志了。

注意:该配置只是禁止Session使用cookie解析工具作为识别标志并不能阻止其他的cookie解析工具读写。也就是说服务器不会自动维護名为JSESSIONID的cookie解析工具了但是程序中仍然可以读写其他的cookie解析工具。

下指定domain为、、和domain=.是完全相同的。

因为domain的问题折腾了N久终于知道参数详解了,问题迎刃而解所以说要详细了解才能解决问题啊!特点记录!

我要回帖

更多关于 cookie的理解 的文章

 

随机推荐