论坛首页 Java企业应用论坛

Session、Cookie 完全理解(转载)

浏览 18125 次
精华帖 (1) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-20   最后修改:2010-12-20
mqlfly2008 写道
mlw2000 写道
bill2004158 写道
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。

 

session 在服务器端得嘛,关IE鸟事啊。。。。

楼主说的应该是在讨论session的客户端(IE,firefox,chrome,甚至自己写的一个支持http的小程序)支持,看楼主的内容水平应该这个(session 在服务器端得嘛,关IE鸟事啊)道理


实在很好奇什么叫做session的客户端,就像楼主说的,session要不就是在传输过程中,要不就是在服务器上存储,session的客户端,天,我理解不了了!个人理解的cooke应该是用户电脑本机带上了服务器端存储的session的id值!拿出来对应,然后可以取得相应数据!实在很想弄明白session的客户端是个什么东东

 

应该是我语言表达不清楚所致,沟通和表达是一切的讨论(甚至争执、个人打架、国家打帐、星际战争)的根源。

 

我换一种说法:

在N久N久之前,人们发明了HTTP,基于不明真相的原因,http是无状态的,人们非常喜欢这个协议;

 

但是为了更好的用户体验(说实话我非常不喜欢这个借口),程序员们于是尝试通过添加一段字符串来作为交互ID,我们称之为SessionID(字符串名字也不限这个,如果你自己写client和server,想用什么用什么),当支持http协议的client端(http client端N多,不要没事总想着浏览器)发起请求时就会带上这个字符串,至于怎么带上,方式不限(隐藏字段,默认cookie字段,自定义cookie字段,url地址,等等等等),服务端拿到后就会开心的sysout("hello 我知道你是谁了:"+SessionID)。

 

再后来,程序员们为了更懒,在服务端把这个sessionID字符串和一个对象关联(未必是对象,随你喜欢,反正是和一种资源关联),于是每次客户端请求时,他们能从这个“关联资源”中取得很多信息,程序员们非常的高兴。

 

一次加班后,一群程序员去泡吧,无意中聊到了那个让人爱恨交加的字符串,一个叫javaeye的程序员说,我们把服务器端的那个关联资源起名叫session吧,大家起哄认同。

 

N年之后的2010年,在景德镇的网络上有人发了篇帖子“Session、Cookie 完全理解”,Zzz

 

1 请登录后投票
   发表时间:2010-12-20  
引用
以Ctrl+N或Shift+点击链接方式打开的IE窗口是运行在同一个进程空 间的,cookie数据在进程空间中是共享的,而双击桌面上的ie图标打开的是一个新的进程,会话级的cookie(未明确指定生存期的cookie)在 新的IE窗口里面是无法访问到的。

问一下,你指的IE是IE6吗?至少我用IE8,在所谓的“新的IE窗口里面”是可以访问的
0 请登录后投票
   发表时间:2010-12-20  
mlw2000 正解
0 请登录后投票
   发表时间:2010-12-20  
非常好,谢谢,我最近为这个东西来的
0 请登录后投票
   发表时间:2010-12-21  
基本理解了,感谢楼主,
但还是有一个细节不懂,
在服务端把这个sessionID字符串和一个对象关联,
请问这个关联是怎么做到的,能不能举个例子
0 请登录后投票
   发表时间:2010-12-21  
每次发送请求都带一个唯一ID,服务器端维护一个table就OK啦
0 请登录后投票
   发表时间:2010-12-21  
mlw2000 写道
mqlfly2008 写道
mlw2000 写道
bill2004158 写道
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。

 

session 在服务器端得嘛,关IE鸟事啊。。。。

楼主说的应该是在讨论session的客户端(IE,firefox,chrome,甚至自己写的一个支持http的小程序)支持,看楼主的内容水平应该这个(session 在服务器端得嘛,关IE鸟事啊)道理


实在很好奇什么叫做session的客户端,就像楼主说的,session要不就是在传输过程中,要不就是在服务器上存储,session的客户端,天,我理解不了了!个人理解的cooke应该是用户电脑本机带上了服务器端存储的session的id值!拿出来对应,然后可以取得相应数据!实在很想弄明白session的客户端是个什么东东

 

应该是我语言表达不清楚所致,沟通和表达是一切的讨论(甚至争执、个人打架、国家打帐、星际战争)的根源。

 

我换一种说法:

在N久N久之前,人们发明了HTTP,基于不明真相的原因,http是无状态的,人们非常喜欢这个协议;

 

但是为了更好的用户体验(说实话我非常不喜欢这个借口),程序员们于是尝试通过添加一段字符串来作为交互ID,我们称之为SessionID(字符串名字也不限这个,如果你自己写client和server,想用什么用什么),当支持http协议的client端(http client端N多,不要没事总想着浏览器)发起请求时就会带上这个字符串,至于怎么带上,方式不限(隐藏字段,默认cookie字段,自定义cookie字段,url地址,等等等等),服务端拿到后就会开心的sysout("hello 我知道你是谁了:"+SessionID)。

 

再后来,程序员们为了更懒,在服务端把这个sessionID字符串和一个对象关联(未必是对象,随你喜欢,反正是和一种资源关联),于是每次客户端请求时,他们能从这个“关联资源”中取得很多信息,程序员们非常的高兴。

 

一次加班后,一群程序员去泡吧,无意中聊到了那个让人爱恨交加的字符串,一个叫javaeye的程序员说,我们把服务器端的那个关联资源起名叫session吧,大家起哄认同。

 

N年之后的2010年,在景德镇的网络上有人发了篇帖子“Session、Cookie 完全理解”,Zzz

 

请问这段话的重点是不是在“一个支持http的小程序”是如何实现将sessionid传递给服务器端的。我其实也不太明白,讲解了很多好像还是表达“客户端从cookie或其他方式中取sessionid然后传给服务器端,在据此id从服务器端存储session对象的散列表中取session。”这个意思,并没有什么特别的呀。

0 请登录后投票
   发表时间:2010-12-21  
Cookie是保存在客户端的数据,Session是保存在服务器端的数据。。。
为什么要分别保存在客户端(PC)和服务器端。。。
这点最重要,理解了这点,再扩展,应用等,都能较快的掌握。。。
0 请登录后投票
   发表时间:2010-12-21  
一个人旅行 写道
mlw2000 写道
mqlfly2008 写道
mlw2000 写道
bill2004158 写道
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。

 

session 在服务器端得嘛,关IE鸟事啊。。。。

楼主说的应该是在讨论session的客户端(IE,firefox,chrome,甚至自己写的一个支持http的小程序)支持,看楼主的内容水平应该这个(session 在服务器端得嘛,关IE鸟事啊)道理


实在很好奇什么叫做session的客户端,就像楼主说的,session要不就是在传输过程中,要不就是在服务器上存储,session的客户端,天,我理解不了了!个人理解的cooke应该是用户电脑本机带上了服务器端存储的session的id值!拿出来对应,然后可以取得相应数据!实在很想弄明白session的客户端是个什么东东

 

应该是我语言表达不清楚所致,沟通和表达是一切的讨论(甚至争执、个人打架、国家打帐、星际战争)的根源。

 

我换一种说法:

在N久N久之前,人们发明了HTTP,基于不明真相的原因,http是无状态的,人们非常喜欢这个协议;

 

但是为了更好的用户体验(说实话我非常不喜欢这个借口),程序员们于是尝试通过添加一段字符串来作为交互ID,我们称之为SessionID(字符串名字也不限这个,如果你自己写client和server,想用什么用什么),当支持http协议的client端(http client端N多,不要没事总想着浏览器)发起请求时就会带上这个字符串,至于怎么带上,方式不限(隐藏字段,默认cookie字段,自定义cookie字段,url地址,等等等等),服务端拿到后就会开心的sysout("hello 我知道你是谁了:"+SessionID)。

 

再后来,程序员们为了更懒,在服务端把这个sessionID字符串和一个对象关联(未必是对象,随你喜欢,反正是和一种资源关联),于是每次客户端请求时,他们能从这个“关联资源”中取得很多信息,程序员们非常的高兴。

 

一次加班后,一群程序员去泡吧,无意中聊到了那个让人爱恨交加的字符串,一个叫javaeye的程序员说,我们把服务器端的那个关联资源起名叫session吧,大家起哄认同。

 

N年之后的2010年,在景德镇的网络上有人发了篇帖子“Session、Cookie 完全理解”,Zzz

 

请问这段话的重点是不是在“一个支持http的小程序”是如何实现将sessionid传递给服务器端的。我其实也不太明白,讲解了很多好像还是表达“客户端从cookie或其他方式中取sessionid然后传给服务器端,在据此id从服务器端存储session对象的散列表中取session。”这个意思,并没有什么特别的呀。


个人认为浏览器就是实现了如何在页面之间不停跳转还能记住这个sessionId,这个应该是浏览器对session的支持,自己写的http的小程序一样要做的这些东西!核心都是维护一个sessionId,如何在页面跳转,如何在不同的页签之间保留这样的一个唯一值。然后浏览器通过怎么样的方式传递这个sessionId也是不同的支持!呵呵,mlw2000兄弟是个讲故事的高手!佩服 

0 请登录后投票
   发表时间:2010-12-21   最后修改:2010-12-21
在application中
放 一个hashmap
可以模拟 session
不过内存很快用光光
Map session = appliction.getAttribter('mysession');
Cookie me = request.getCookie();
String sessionid = me.get('sessionid');
if(sessionid==null||sessionid.length==0){
    sessionid = makeAKey(session.getKeySet());
}
Objection obj = session.get(sessionid);
sysout(obj);
session.set(sessionid,"i will be back");
repson.setCookie(....('sessionid',sessionid));
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics