- 浏览: 123373 次
- 性别:
- 来自: 北京
博客专栏
-
httclient实践与源...
浏览量:0
文章分类
- 全部博客 (141)
- java设计模式 (6)
- oracle (2)
- spring (0)
- java多线程 (12)
- Effective Java 读书笔记 (5)
- mysql (11)
- 书签 (2)
- Web前端 (2)
- python (6)
- 技术博客 (6)
- 搬家 (2)
- android (1)
- java (18)
- 架构 (6)
- linux (14)
- memcached (3)
- 测试 (1)
- 网络 (1)
- 高性能WEB (2)
- http (1)
- java io (2)
- jdbc (1)
- php (5)
- css (2)
- jenkins (1)
- jfinal (1)
- maven (3)
- 算法 (3)
- 代码规范 (1)
- shell (3)
- 安全 (1)
- fastJson源码剖析 (0)
- jdk源码分析 (0)
- git (1)
- 分布式知识点 (0)
- 分布式 (1)
- tcp (1)
- cpu (2)
- 软技能 (1)
- 编译原理 (1)
- 操作系统 (1)
- java虚拟机 (1)
- 处理器 (1)
- tbschedule (1)
- 需要看的源码 (1)
- idea (1)
- zookeeper (1)
- httpclient (1)
最新评论
-
lliiqiang:
功能是关键,但是因为人的性能有限,所以性能也有可能是功能,
关于有效的性能调优的一些建议 -
huangyunbin:
呵呵,感觉和缓存很相似,已经存在的直接缓存里取,缓存没有的话加 ...
享元模式
关于COOKIE和SESSION的关系,一直没搞清楚。网上一搜COOKIE,普遍都有会话COOKIE和持久COOKIE的概念。
rubyeye的博客里有这样的解释,我把部分贴过来。(http://rubyeye.iteye.com/blog/196117)
引用
当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话.
可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才释放内存).
上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.
如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了.
刚开始理解时,我也认为会有持久和会话这两种COOKIE。我认为,
会话COOKIE就是用来存放SESSIONID的,并且只存在于浏览器内存,浏览器关闭后会话COOKIE就被删除;
持久COOKIE就是用来存放其它信息,并且是在我们的本地硬盘里能看到的那种COOKIE。
然后我写了个SERVLET试了一下。
Java代码 收藏代码
第一次访问这个SERVLET,页面显示
引用
cookies is null.
session is not null.
session id: 0D0AABB6F911362FEE87BEEB2953C33F
第二次访问,页面显示
引用
cookies is not null.
cookie0 name: new
cookie1 name: JSESSIONID
session is not null.
session id: 0D0AABB6F911362FEE87BEEB2953C33F
第二次访问时从客户端来了两个COOKIE,名为“new”的COOKIE是我创建的,名为“JSESSIONID”的COOKIE应该是服务器TOMCAT创建的,但这时,在本地硬盘里找不到这两个COOKIE的文件。
改一下SERVLET,在创建名为“new”的COOKIE时,加一句
Java代码 收藏代码
cookie.setMaxAge(1000);
然后本地硬盘里就有“new”这个COOKIE了。
这下就有疑问了,在没有设置COOKIE存活期时,自己创建的SESSION不会存到本地硬盘,会不会TOMCAT创建的所谓的会话COOKIE也是没有设置存活期呢?
然后根据zddava的博客(http://zddava.iteye.com/blog/311053),找到了TOMCAT里创建会话COOKIE的代码。
在
org.apache.catalina.connector.Request.java里,
Java代码 收藏代码
cookie.setMaxAge(-1);使COOKIE在浏览器被关闭时删除。而且这里的cookie和上面SERVLET里的cookie都是javax.servlet.http.Cookie。
由此得出结论,可能最开始是我理解错了,COOKIE并没有会话COOKIE和持久COOKIE之分。我们本地创建的“持久COOKIE”和WEB容器创建的“会话COOKIE”都是一种COOKIE,就是javax.servlet.http.Cookie。只是WEB容器把存活期设置成了关闭浏览器时删除而已(TOMCAT)。
rubyeye的博客里有这样的解释,我把部分贴过来。(http://rubyeye.iteye.com/blog/196117)
引用
当浏览器得到这个sessionid会将它放在自己的进程内存里,这里不同的浏览器会有所不同,IE进程间不能共享这个sessionid,也就是新开一个IE将不能共享这个sessionid;而Firefox进程间可以共享.然后你继续发请求给这个网站的时候,浏览器就会把这个sessionid放在请求头里发送给该服务器了,这样服务器得到sessionid后再和自己内存里存放的sessionid对比锁定客户端,从而区分不同客户端,完成会话.
可以看出如果用这种方式,当用户在会话的过程中关闭浏览器结束进程,则这个sessionid将消失,如果用户又打开浏览器想继续这次会话的时候,就会因为发送的请求中没有这个sessionid而使服务器无法辨别该把那个session信息给他,注意(这个时候服务器端的sessionid和sessionid所指向的session都还存在,只是没有正确的sessionid和它匹配而占用服务器内存,只有session过期或服务器重启才释放内存).
上面这种方式叫会话cookie,把cookie放在浏览器内存里,只能在这个浏览器的内存范围里完成会话,是一种不长久的方式,为了能长久会话,就出现了持久化cookie,把cookie固化在用户的计算机上,现在的cookie不单单能存放sessionid,还能放用户信息,样式表信息等.
如果用户禁止了所有cookie的使用,那么会话cookie和持久化cookie都不能用了,有个方案也可以解决问题,就是URL重写,这里要说下的就是URL重写只能实现会话cookie的效果,持久会话实现不了.
刚开始理解时,我也认为会有持久和会话这两种COOKIE。我认为,
会话COOKIE就是用来存放SESSIONID的,并且只存在于浏览器内存,浏览器关闭后会话COOKIE就被删除;
持久COOKIE就是用来存放其它信息,并且是在我们的本地硬盘里能看到的那种COOKIE。
然后我写了个SERVLET试了一下。
Java代码 收藏代码
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { Cookie cookie = null; PrintWriter out = response.getWriter(); out.println("<html><body>"); Cookie[] cookies = request.getCookies(); // 如果没有COOKIE,新建一个COOKIE if (cookies == null) { out.println("<b>cookies is null.</b></br>"); cookie = new Cookie("new", "1"); response.addCookie(cookie); } else { out.println("<b>cookies is not null.</b></br>"); for (int i = 0; i < cookies.length; i++) { cookie = cookies[i]; out.println("cookie" + i + " name: " + cookie.getName() + "</br>"); } } HttpSession session = request.getSession(); if (session == null) { out.println("<b>session is null.</b></br>"); } else { out.println("<b>session is not null.</b></br>"); out.println("session id: " + session.getId() + "</br>"); } out.println("</body></html>"); }
第一次访问这个SERVLET,页面显示
引用
cookies is null.
session is not null.
session id: 0D0AABB6F911362FEE87BEEB2953C33F
第二次访问,页面显示
引用
cookies is not null.
cookie0 name: new
cookie1 name: JSESSIONID
session is not null.
session id: 0D0AABB6F911362FEE87BEEB2953C33F
第二次访问时从客户端来了两个COOKIE,名为“new”的COOKIE是我创建的,名为“JSESSIONID”的COOKIE应该是服务器TOMCAT创建的,但这时,在本地硬盘里找不到这两个COOKIE的文件。
改一下SERVLET,在创建名为“new”的COOKIE时,加一句
Java代码 收藏代码
cookie.setMaxAge(1000);
然后本地硬盘里就有“new”这个COOKIE了。
这下就有疑问了,在没有设置COOKIE存活期时,自己创建的SESSION不会存到本地硬盘,会不会TOMCAT创建的所谓的会话COOKIE也是没有设置存活期呢?
然后根据zddava的博客(http://zddava.iteye.com/blog/311053),找到了TOMCAT里创建会话COOKIE的代码。
在
org.apache.catalina.connector.Request.java里,
Java代码 收藏代码
protected void configureSessionCookie(Cookie cookie) { cookie.setMaxAge(-1); String contextPath = null; if (!connector.getEmptySessionPath() && (getContext() != null)) { contextPath = getContext().getEncodedPath(); } if ((contextPath != null) && (contextPath.length() > 0)) { cookie.setPath(contextPath); } else { cookie.setPath("/"); } if (isSecure()) { cookie.setSecure(true); } }
cookie.setMaxAge(-1);使COOKIE在浏览器被关闭时删除。而且这里的cookie和上面SERVLET里的cookie都是javax.servlet.http.Cookie。
由此得出结论,可能最开始是我理解错了,COOKIE并没有会话COOKIE和持久COOKIE之分。我们本地创建的“持久COOKIE”和WEB容器创建的“会话COOKIE”都是一种COOKIE,就是javax.servlet.http.Cookie。只是WEB容器把存活期设置成了关闭浏览器时删除而已(TOMCAT)。
发表评论
-
java Unsafe类
2018-03-20 20:55 450http://ifeve.com/sun-misc-unsaf ... -
java 之DelayQueue实际运用示例
2016-06-15 17:09 540http://www.cnblogs.com/sunzhenc ... -
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
2015-07-03 19:11 702window下在同一台机器上安装多个版本jdk,修改环境变量不 ... -
java实现base64
2015-04-29 15:30 542BASE64和其他相似的编码算法通常用于转换二进制数据为文本数 ... -
最全的静态网站生成器(开源项目)
2015-04-26 00:53 538最全的静态网站生成器(开源项目) http://www.ite ... -
关于有效的性能调优的一些建议
2015-04-19 12:09 768关于有效的性能调优的 ... -
java 代码时间和内存测试
2015-04-18 22:26 643// 测试用了多少内存 import java.util ... -
系统打印日志的10条建议(翻译)
2015-04-14 14:33 503http://uptoknow.iteye.com/blog/ ... -
Java编程最差实践
2015-04-14 14:32 413http://macrochen.iteye.com/blog ... -
几行代码写RPC
2015-04-13 22:55 471转自梁飞博客 package com.alibaba.stud ... -
58龙哥教你“如何做系统性能优化”(纯干货)
2015-04-12 21:58 613如何做系统性能优化 性能优化的目标是什么?不外乎两个: 时间 ... -
java 关于for和foreach,兼顾效率与安全
2014-12-05 14:46 17456关于for和foreach,兼顾效率与安全 对于数组的访问,是 ... -
java 关于for循环
2014-12-05 14:41 582关于使用for循环 有人喜欢使用for作类似while的循环: ... -
内存cookie与持久cookie
2014-11-05 22:27 588cookie分两种 :会话cookie(session coo ... -
Java字符串底层理解
2014-09-11 15:11 7591. 栈(stack)与堆(heap)都是 ... -
java 字符串相加
2014-09-10 14:01 1532字符串相加。string + (原作者: 火龙果) 为了加 ... -
java虚拟机垃圾回收深入理解
2013-03-18 17:52 924JAVA学习之4 引用与JVM 1.java内存管理分为内存分 ...
相关推荐
- 对于大容量的会话数据,可以考虑定期将部分不活跃的会话数据持久化到磁盘,以节省内存资源。 通过以上步骤,我们可以实现一个高效的分布式会话追踪系统,既能保证用户状态的连续性,又能适应大规模的并发请求。...
与Cookie不同,它存储的数据量更大,且安全性相对更高,因为数据不在用户浏览器中持久化。 4. **创建会话**:服务器通常会生成一个唯一标识符(sessionID),并将这个ID分配给用户。然后将用户的数据存储在服务器的...
通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...
如果未设置过期时间,则默认为会话Cookie,在用户关闭浏览器后即被删除。 - **大小限制**:每个Cookie的大小通常不超过4KB。 - **Session**:Session是服务器为了跟踪用户的会话而创建的一个对象,用来存储特定...
在Web应用程序中,Cookie常被用来存储用户的一些临时或持久性信息,如登录状态、用户首选项等。这是因为HTTP协议本身是无状态的,每次请求之间不保留任何上下文信息。为了解决这个问题,服务器会发送一个Cookie到...
会话cookie与持久cookie的主要区别在于它们的有效期: - **会话cookie**:没有设置过期时间,其生命周期仅限于当前的浏览器会话。一旦浏览器关闭,这类cookie将被自动清除。 - **持久cookie**:通过设置过期时间(如...
这种操作在需要持久化Cookie或通过网络传输Cookie时非常必要。 ### Cookie的加密与解密 #### 1. 加密的重要性 Cookie中可能包含敏感信息,如用户身份验证信息、会话ID等。因此,确保这些信息在传输过程中的安全性...
本文将深入探讨Cookie和Session两种主要的会话管理方式,并结合一个名为"ShoppingCar"的示例来阐述它们在实际应用中的工作原理。 **一、Cookie** Cookie是由服务器发送到客户端(浏览器)的一小段信息,然后由...
Cookie有两种类型:会话Cookie和持久Cookie。会话Cookie在浏览器关闭后即消失,而持久Cookie可以通过设置过期时间在用户关闭浏览器后仍保留。 2. **Session机制**:Session则是在服务器端保存用户状态的技术。...
使用`setMaxAge`方法并指定秒数可以让Cookie持久化,值为0则删除Cookie。 在实际应用中,开发者需要根据业务需求选择合适的会话管理策略。对于敏感信息,通常使用Session来存储,因为它们不在客户端明文保存。而...
2. **类型**:有Session Cookie(会话Cookie)和Persistent Cookie(持久性Cookie)。会话Cookie在浏览器关闭后消失,而持久性Cookie则设定过期日期,可在用户下次访问网站时继续使用。 3. **用途**:Cookie广泛用于...
Cookie分为会话Cookie和持久Cookie两种类型,会话Cookie仅在当前浏览器会话期间有效,而持久Cookie则会根据设定的有效期存储在硬盘上。 #### 获取Cookie值 ```javascript function getCookie(cookieName) { var ...
在 cookie 机制中,还有两种类型的 cookie:会话 cookie 和持久 cookie。如果不设置过期时间,cookie 的生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie 就消失了。这 种 生 命 期 为 浏 览 会 话 期 的 ...
当用户禁用Cookie时,可以通过URL重写技术来实现持久化的会话管理。 ```java String URL = response.encodeURL("/MyShop/SwitchBook?name=java"); out.println("点击购买</a>"); ``` 这样即使用户禁用了...
**二、会话Cookie与持久Cookie的区别** 1. **会话Cookie**:若未设置过期时间,Cookie生命周期仅限于当前浏览器会话,关闭浏览器窗口后即消失,不保存在硬盘上。 2. **持久Cookie**:设置过期时间的Cookie会被保存...
- **会话Cookie**:默认情况下,Cookie是临时性的,仅在用户当前会话期间有效。 - **持久Cookie**:可以通过设置Cookie的有效期使其长期保存在用户的计算机上。 2. **有效期**: - **会话有效期**:这种类型的...
3. 使用Session Cookie代替持久化Cookie:如果只需在会话期间保留状态,可以不设置过期时间,浏览器关闭后Cookie自动清除。 4. 对敏感信息加密:对存储在Cookie中的敏感信息进行加密,增强数据安全性。 总结,...
2. 持久Cookie(Persistent Cookie):这类Cookie会保存在客户端磁盘上,它们的过期时间可以由服务器指定,即使关闭浏览器或重启计算机,它们依然有效。 ### Cookie的应用场景 - **用户认证**:存储用户的登录信息...