首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 浏览器和服务器靠什么维持一个session? [已结帖,结帖人:chain99081]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chain99081
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-21 20:01:01 楼主
    如题
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • milooxu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 20:16:491楼 得分:0
    个人感觉应该是有一个东西来存放这些信息的。看看高手怎么说的。关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhengpeiyong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 20:47:292楼 得分:0
    关注中,帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yeruping
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 21:48:443楼 得分:4
    临时Cookies ,  你可以实验一下,在页面设置一个session ,然后你去
    取得所有CookieS ,你会发现取出有个临时cookie,大概叫jsession....
    ..什么的,记不清楚了,

    session是依赖cookies的
    如果浏览器禁用cookies你会发现session也不能用了!!!!

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • norwolfli
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 22:24:404楼 得分:4
    首先说明,浏览器没有session,session只在服务器端维护.
    浏览器只有jsessionId,也就是sessionId用来唯一标识session.用户每次请求会把这个sessionId提交给服务器.

    sessionId会使用cookie保存,当浏览器不支持cookie时使用URLRewrite保存sessionId,也就是在请求的URL后加?,
    例如:www.csdn.net?jsessionId=1234556677069695
    jsessionId长度可以在应用服务器上设置,为保证唯一,一般会设置长一些.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bining_hb
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 23:47:135楼 得分:0
    楼上说得很好
    当你使用浏览器访问的时候,服务器在他的内存中给你开辟出一个内存,然后会分配一个seesionId给你,如果你的浏览器支持cookie时,这个id会被保存到你的电脑上,如果你的浏览器不支持的话,在你的下次请求时,会在请求的路径上加上这个id号。大概就是这样的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fire222
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 00:07:236楼 得分:0
    顶 4楼
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aniude
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 00:26:437楼 得分:0
    难道你想hack?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • beiouwolf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:20:548楼 得分:4
    session由服务器维持
    生存周期由服务器指定

    客户端在打开cookie的情况下,由cookie来标识自己的sessionid
    当cookie不可用时,需要通过URLRewriter来实现sessionid的标识
    以JSP来说,可以通过HttpServletResponse接口的encodeUrl(String)和encodeRedirectUrl(String)
    来产生一个基于浏览器地址的jsessionid
    注意格式,sessionid不是以"?"的Query字符串连接,而是以";"连接,是作为地址的一部分,不是查询字符串
    示例: http://www.abc.com;jseesionid=1234567890
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dracularking
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:00:249楼 得分:4
    http本身是无session的,无法跟踪客户端的信息,换句话说:http协议不管是谁联接自己。
    为了实现session,必须有浏览器支持。浏览器可以用cookie存储sessionid,这是最通用的做法。
    但是,如果我自己写一个完全符合http协议的浏览器,但是不配合服务器的session要求,那么服务器就无法产生session。
    好在现在的浏览器都支持session要求,即使关闭了cookie,浏览器也会向服务器传递sessionid,这个id是存储在浏览器的内存空间中的,不保存在硬盘cookie中。每次浏览器发出的请求,都会在http header里 带上 sessionid来标识自己。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lude8880
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:03:2610楼 得分:0
    这个我知道,session内部也是用cookie解决的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ooo19841080xinxin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:06:4911楼 得分:0
    哦Y
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lude8880
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:25:2912楼 得分:0
    具体哪本书里讲的忘了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ilysony
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:35:5613楼 得分:0
    引用 9 楼 dracularking 的回复:
    http本身是无session的,无法跟踪客户端的信息,换句话说:http协议不管是谁联接自己。
    为了实现session,必须有浏览器支持。浏览器可以用cookie存储sessionid,这是最通用的做法。
    但是,如果我自己写一个完全符合http协议的浏览器,但是不配合服务器的session要求,那么服务器就无法产生session。
    好在现在的浏览器都支持session要求,即使关闭了cookie,浏览器也会向服务器传递sessionid,这个id是存储在浏览器的内存空…


    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zzhua100
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:07:0914楼 得分:4
    引用 9 楼 dracularking 的回复:
    http本身是无session的,无法跟踪客户端的信息,换句话说:http协议不管是谁联接自己。
    为了实现session,必须有浏览器支持。浏览器可以用cookie存储sessionid,这是最通用的做法。
    但是,如果我自己写一个完全符合http协议的浏览器,但是不配合服务器的session要求,那么服务器就无法产生session。
    好在现在的浏览器都支持session要求,即使关闭了cookie,浏览器也会向服务器传递sessionid,这个id是存储在浏览器的内存空…


    我一直以为是这种方式的:http协议是一次连接的,不保存客户端状态。
      web 服务器收到一个http请求后在服务器端开辟一个存储空间(保存用户状态也就session)同时生成了一个唯一的sessionId,然后把客户端请求的资源连同这个sessionId发送给客户端,这时服务器的任务完成了,然后是客户端的事情了。
      客户端就看用什么东西来接收服务器用http协议来发来的内容了,目前世界基本上都是浏览器了,浏览器可以用cookie来存储sessionId了,客户端在第二次向服务器发送请求的时候就会把这个sessionid带上了;此时web服务器在第二次接到用户请求时就可以根据传过来的sessionId从内存中获得用户状态了。
      所以客户端如果把cookie给禁用了就保存不了sessionId,也就没法交互了。而某些系统因为必须要保存用户状态的,这就有了url重写的概念,web服务器基本上都有这个功能,在java中用encodeUrl(String)或 encodeRedirectURL(String) 来实现了,即web服务器在发送给客户端资源前要先跟客户端来次交互,判断客户端浏览器是否支持cookie,如果支持则将资源原样发回,如果不支持则在发回资源的url中加上jsessionId.如http://www.hjcenter.com/report.jsp;jsession=189FSFJAJIWFJA8990.
    比如这样:1.mm给jj打电话要生日礼物
              2.jj几乎跑遍了全市花光了所有的积蓄好不容易才买到了mm要的礼物然后准备给mm寄过去,jj妈妈看着儿子太可怜了提请说:"你这么的对她可要她记你的好",jj想想有道理。
              3.于是jj就打电话给mm,终于腼腆滴、吱吱唔唔的表达了心里的想法
              4.最后,jj却是在生日礼物上贴了个独一无二写满东西的大标签给mm寄过去了。

    所以对这句“浏览器也会向服务器传递sessionid,这个id是存储在浏览器的内存空...”我有点迷惑,不知道是不是自己想的错了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhang2008shu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 19:06:5615楼 得分:0
    今天 刚学的
    session
    request
    pagecontext
    aplication
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved