- 架构师
- 等级: 初级会员
- 性别:
- 文章: 5
- 积分: 50
- 来自: 广州
|
经常听人说session和cookie的区别,听得多了连自己都糊涂了。 根本就没这回事。 session和cookie,说到底都是cookie,因为大多数的session是用cookie来实现的。既然两个都是cookie,谈区别就显得很可笑了。
正确的说法是:session和cookie一起用,和只用cookie,两者的区别。 这样说更加反映问题的本质。
常见误区1:cookie数据存放在客户的浏览器上,session数据放在服务器上。
真相:session也要借助cookie,也要存放在客户端。
常见误区2:只要关闭浏览器,session就消失了,而cookie不会消失
真相:正好说反了,只有cookie才会因为浏览器的关闭而消失,session是不会因为浏览器的关闭而消失的,服务端session一般是定期清理,一段时间不用会被删掉。
常见误区3:会话cookie即session,持久cookie即cookie。
真相:很多会话cookie并没有用到JSessionId这种服务端动态生成的机制,也就是说你每次登录进去,cookie都是一模一样的值,但是人家偏偏就是会话cookie。单凭cookie的生效时间、过期时间来判断,是不够的,要看服务端的实现原理。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- liubey
- 等级:
- 性别:
- 文章: 224
- 积分: 160
- 来自: 大连
|
常见误区1:cookie数据存放在客户的浏览器上,session数据放在服务器上。
真相:session也要借助cookie,也要存放在客户端。
点评:cookie与session通常都会有一个结合点,比如通过那个特殊的名字叫做JSESSIONID的cookie,或者通过加密后的cookie在服务器端还原回来类似userId等字段实现自动登录等
常见误区2:只要关闭浏览器,session就消失了,而cookie不会消失
真相:正好说反了,只有cookie才会因为浏览器的关闭而消失,session是不会因为浏览器的关闭而消失的,服务端session一般是定期清理,一段时间不用会被删掉。
点评:session与cookie的生命周期都是由服务器端控制,不同的是session是到期后由服务器删除,cookie到期后由浏览器删除
常见误区3:会话cookie即session,持久cookie即cookie。
真相:很多会话cookie并没有用到JSessionId这种服务端动态生成的机制,也就是说你每次登录进去,cookie都是一模一样的值,但是人家偏偏就是会话cookie。单凭cookie的生效时间、过期时间来判断,是不够的,要看服务端的实现原理。
点评:同意!
|
返回顶楼 |
|
|
- hotapple
- 等级: 初级会员
- 性别:
- 文章: 12
- 积分: 70
- 来自: 武汉
|
只是jsessionid在客户端cookie里有保存而已,session中其它的内容你确定能在cookie里面找到?
|
返回顶楼 |
|
|
- cectsky
- 等级: 初级会员
- 性别:
- 文章: 915
- 积分: 40
- 来自: 哈尔滨
|
liubey 写道
常见误区1:cookie数据存放在客户的浏览器上,session数据放在服务器上。 真相:session也要借助cookie,也要存放在客户端。 点评:cookie与session通常都会有一个结合点,比如通过那个特殊的名字叫做JSESSIONID的cookie,或者通过加密后的cookie在服务器端还原回来类似userId等字段实现自动登录等 乱弹:session有的时候也可以不用借助cookie,使用url argument也可以完成 常见误区2:只要关闭浏览器,session就消失了,而cookie不会消失 真相:正好说反了,只有cookie才会因为浏览器的关闭而消失,session是不会因为浏览器的关闭而消失的,服务端session一般是定期清理,一段时间不用会被删掉。 点评:session与cookie的生命周期都是由服务器端控制,不同的是session是到期后由服务器删除,cookie到期后由浏览器删除
常见误区3:会话cookie即session,持久cookie即cookie。 真相:很多会话cookie并没有用到JSessionId这种服务端动态生成的机制,也就是说你每次登录进去,cookie都是一模一样的值,但是人家偏偏就是会话cookie。单凭cookie的生效时间、过期时间来判断,是不够的,要看服务端的实现原理。 点评:同意!
|
返回顶楼 |
|
|
- liubey
- 等级:
- 性别:
- 文章: 224
- 积分: 160
- 来自: 大连
|
cectsky 写道
liubey 写道
常见误区1:cookie数据存放在客户的浏览器上,session数据放在服务器上。 真相:session也要借助cookie,也要存放在客户端。 点评:cookie与session通常都会有一个结合点,比如通过那个特殊的名字叫做JSESSIONID的cookie,或者通过加密后的cookie在服务器端还原回来类似userId等字段实现自动登录等 乱弹:session有的时候也可以不用借助cookie,使用url argument也可以完成 常见误区2:只要关闭浏览器,session就消失了,而cookie不会消失 真相:正好说反了,只有cookie才会因为浏览器的关闭而消失,session是不会因为浏览器的关闭而消失的,服务端session一般是定期清理,一段时间不用会被删掉。 点评:session与cookie的生命周期都是由服务器端控制,不同的是session是到期后由服务器删除,cookie到期后由浏览器删除
常见误区3:会话cookie即session,持久cookie即cookie。 真相:很多会话cookie并没有用到JSessionId这种服务端动态生成的机制,也就是说你每次登录进去,cookie都是一模一样的值,但是人家偏偏就是会话cookie。单凭cookie的生效时间、过期时间来判断,是不够的,要看服务端的实现原理。 点评:同意!
关于SESSION使用URL重写这种实现方式,在tomcat7的源码里作者写了如下一句话:
Do not reuse the session id if it is from a URL, to prevent possible phishing attacks
我觉得作者挺好玩,具体看我这文章
|
返回顶楼 |
|
|
- white_crucifix
- 等级:
- 性别:
- 文章: 230
- 积分: 110
- 来自: 杭州
|
擦,架构师威武啊。。。
|
返回顶楼 |
|
|
- vb2005xu
- 等级:
- 性别:
- 文章: 722
- 积分: 800
- 来自: 北京
|
我就不想再说什么了,亲,你能试试这个场景么,关闭你浏览器端的cookie,然后登录: 假设登陆后在服务端生成session_id,然后在后续的请求中url上一直带着这个session_id 你看你的程序还能走的通么,... 如果能走通,亲,你所说的这些是否可以不算成立呢
|
返回顶楼 |
|
|
- vb2005xu
- 等级:
- 性别:
- 文章: 722
- 积分: 800
- 来自: 北京
|
常见误区2:只要关闭浏览器,session就消失了,而cookie不会消失 真相:正好说反了,只有cookie才会因为浏览器的关闭而消失,session是不会因为浏览器的关闭而消失的,服务端session一般是定期清理,一段时间不用会被删掉。 点评:session与cookie的生命周期都是由服务器端控制,不同的是session是到期后由服务器删除,cookie到期后由浏览器删除
--------- 亲,难道你用js在前端就不能创建和销毁 cookie了?
|
返回顶楼 |
|
|
- 一个java程序员
- 等级: 初级会员
- 性别:
- 文章: 14
- 积分: 30
- 来自: 北京
|
不能说没区别吧。 还是很大的。
但是相辅相成的。
|
返回顶楼 |
|
|
- ahack
- 等级: 初级会员
- 文章: 19
- 积分: 30
|
仅仅是因为cookie带了sessoinid而已,sessionid是一个唯一的key。通过sessionid才能在服务器上找到对应的session信息。cookie是存在客户端的而seesion内容是存在于服务器内存或缓存文件中的。至于关闭浏览器session失效?有本事你带着未过期的sessionid再试试?
|
返回顶楼 |
|
|