今天早上来csdn,发现升到5个三角了,高兴啊,散200再说,嘿嘿!
还有,昨天给人家解释session问题时,发现一个小问题,希望高手们给解释解释!大家都知道,session保持的实际上是通过服务器和客户端传递sessionID实现的。通常情况客户端是通过会话cookie(生命期为浏览器会话期间的cookie,与存储在硬盘上的cookie不同,这种cookie是存储在内存里的)来保存服务器端传递过来的sessionID的,并且在以后的会话期间的每次请求都会发送该cookie到服务器,来实现session!
问题一:
但是当客户端浏览器禁止cookie时,大部分的文章都说,此时可以通过URL重写技术来实现session。对此,我有些疑问,我用HTTPLook发现在IE禁止cookie的情况下,服务器端一样可以发送cookie的信息(我拦截到“Set-Cookie: JSESSIONID=aQQxcAtUHWv9; path=/”),而且下次访问时,IE依然会发送此cookie(“Cookie: JSESSIONID=aQQxcAtUHWv9”)。不知道是什么原因???难道客户端禁止cookie只能禁止储在硬盘上的cookie???
问题二:
另外,我想了解一下URL重写是怎么样的?是不是在服务器端在URL后面增加sessionID的信息?如果是在服务器端处理的话,如果不对服务器端的所有URL进行重写(包括提交的目的URL和超链接),那在客户端禁止cookie的情况下(假设可以禁止会话cookie的话),是不是就没有办法保持session了呢??希望高手能给个准确的解答,也希望和我一样糊涂的朋友来参加讨论^_^
还有,昨天给人家解释session问题时,发现一个小问题,希望高手们给解释解释!大家都知道,session保持的实际上是通过服务器和客户端传递sessionID实现的。通常情况客户端是通过会话cookie(生命期为浏览器会话期间的cookie,与存储在硬盘上的cookie不同,这种cookie是存储在内存里的)来保存服务器端传递过来的sessionID的,并且在以后的会话期间的每次请求都会发送该cookie到服务器,来实现session!
问题一:
但是当客户端浏览器禁止cookie时,大部分的文章都说,此时可以通过URL重写技术来实现session。对此,我有些疑问,我用HTTPLook发现在IE禁止cookie的情况下,服务器端一样可以发送cookie的信息(我拦截到“Set-Cookie: JSESSIONID=aQQxcAtUHWv9; path=/”),而且下次访问时,IE依然会发送此cookie(“Cookie: JSESSIONID=aQQxcAtUHWv9”)。不知道是什么原因???难道客户端禁止cookie只能禁止储在硬盘上的cookie???
问题二:
另外,我想了解一下URL重写是怎么样的?是不是在服务器端在URL后面增加sessionID的信息?如果是在服务器端处理的话,如果不对服务器端的所有URL进行重写(包括提交的目的URL和超链接),那在客户端禁止cookie的情况下(假设可以禁止会话cookie的话),是不是就没有办法保持session了呢??希望高手能给个准确的解答,也希望和我一样糊涂的朋友来参加讨论^_^
问题二
SESSION的有效期和url上的sessionid没有关系
gx
问题二
SESSION的有效期和url上的sessionid没有关系
====================================================================================这个我到时知道,不过跟我问的问题好象没什么关系撒?
URLWrite是用正则表达式来替换URL,已达到有利于搜索引擎搜索
如http://www.csdn.net/blog/test.jsp?name=tomuno&blogId=123456
经过URLWrite后变为
http://www.csdn.net/tomuno
URLWrite一般是通过web服务器配置 来实现的
Session详解
http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=10
Cookies的写入与读取 Cookies集合是附属于Response对象及Request对象的数据集合,使用时需要在前面加上Response或Request。 用于给客户机发送Cookies的语法通常为: 当给不存在的Cookies集合设置时,就会在客户机创建,如果该Cookies己存在,则会被代替。由于Cookies是作为HTTP传输的头信息的一部分发给客户机的,所以向客户机发送Cookies的代码一般放在发送给浏览器的HTML文件的标记之前。 如果用户要读取Cookies,则必须使用Request对象的Cookies集合,其使用方法是: 需要注意的是,只有在服务器未被下载任何数据给浏览器前,浏览器才能与Server进行Cookies集合的数据交换,一旦浏览器开始接收Server所下载的数据,Cookies的数据交换则停止,为了避免错误,要在程序和前面加上response.Buffer=True。
Cookies的应用 几乎所有的网站设计者在进行网站设计时都使用了Cookie,因为他们都想给浏览网站的用户提供一个更友好的、人文化的浏览环境,同时也能更加准确地收集访问者的信息。
网站浏览人数管理 由于代理服务器、缓存等的使用,唯一能帮助网站精确统计来访人数的方法就是为每个访问者建立一个唯一的ID。使用Cookie,网站可以完成以下工作:测定多少人访问过;测定访问者中有多少是新用户(即第一次来访),多少是老用户;测定一个用户多久访问一次网站。 通常情况下,网站设计者是借助后台数据库来实现以上目的的。当用户第一次访问该网站时,网站在数据库中建立一个新的ID,并把ID通过Cookie传送给用户。用户再次来访时,网站把该用户ID对应的计数器加1,得到用户的来访次数或判断用户是新用户还是老用户。 按照用户的喜好定制网页外观 有的网站设计者,为用户提供了改变网页内容、布局和颜色的权力,允许用户输入自己的信息,然后通过这些信息对网站的一些参数进行修改,以定制网页的外观。 在电子商务站点中实现诸如"购物篮"等功能 可以使用Cookie记录用户的ID,这样当你往"购物篮"中放了新东西时,网站就能记录下来,并在网站的数据库里对应着你的ID记录当你"买单"时,网站通过ID检索数据库中你的所有选择就能知道你的"购物篮"里有些什么。 在一般的事例中,网站的数据库能够保存的有你所选择的内容、你浏览过的网页、你在表单里填写的信息等;而包含有你的唯一ID的Cookie则保存在你的电脑里。 Cookies的缺陷 Cookie虽然被广泛的应用,并能做到一些使用其它技术不可能实现的功能。但也存在一些不够完美的方面,给应用带来不便。 多人共用一台电脑的问题 任何公共场合的电脑或者许多在办公室或家里使用的电脑,都会同时被两个以上的人使用。这样,当你用它在网上超市购物时,网上超市或网站会在这台机器上留下一个Cookie,将来也许就会有某个人试图使用你的账户购物,带来了不安全的可能。当然,在一些使用多用户操作系统如Windows NT或UNIX的电脑上,这并不会成为一个问题。因为在多用户操作系统下不同的账户的Cookie分别放在不同的地方。
Cookies被删除时
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/
CurrentVersion/Internet Settings/Cache/Special Paths/Cookies,这是Cookies在内存中的键值,把这个键值删除。至此Cookies无论以什么形式存在,我们都不用再害怕了。 最后有必要说明的一点是:杜绝Cookies虽然可以增强你电脑的信息安全程度,但这样做同样会有一些弊端。比如在一些需要Cookies支持的网页上,会发生一些莫名其妙的错误,典型的例子就是你以后不能使用某些网站的免费信箱了。 Cookies欺骗 通过分析Cookie的格式,我们知道,最后两项中分别是它的URL路径和域名,服务器对Cookie的识别???的就是这两个参数。正常情况下,我们要浏览一个网站时输入的URL便是它的域名,需要经过域名管理系统DNS将其转化为IP地址后进行连接。若能在DNS上进行一些设置,把目标域名的IP地址对应到其它站点上,我们便可以非法访问目标站点的Cookie了。 要进行Cookies欺骗,其实很简单。比如在Win9X下的安装目录下,有一名为hosts.sam的文件,以文本方式打开后会看到这样的格式: 127.0.0.1 localhost 经过设置,便可以实现域名解析的本地化,只需将IP和域名依上面的格式添加到文件中并另存为hosts即可。hosts文件实际上可以看成一个本机的DNS系统,它可以负责把域名解释成IP地址,它的优先权比DNS服务器要高,它的具体实现是TCP/IP协议中的一部分。 比如我们要读取的目标站点 www.abc.com 所生成的Cookies信息,可以借助www.def.com(自己的站点)。www.def.com 存放用来进行欺骗所需的文件,通过它读取和修改对方的Cookie。 步骤一 pingwww.def.com 的IP地址: ping www.def.com Reply from 192.168.0.1: bytes=32 time=20ms TTL=244 然后修改hosts.sam文件如下: 192.168.0.1 www.abc.com 并保存为hosts文件。 步骤二 读取Cookies信息: 将用来读取Cookie的页面传www.def.com ,此时连www.abc.com,由于我们进行本机DNS域名解析的修改,这时网络连接的并不www.abc.com,而www.def.com 。 这www.abc.com设在本地的Cookie便可被读出。 步骤三 同样道理,你可对读出的数据进行修改,并可将修改后的信息写入Cookie中。修改完毕后,删掉hosts文件,再重新进www.abc.com,此时所使用的Cookies数据就是你制定的数据。 总之,在某种程度上虽然可以实现Cookies的欺骗,给网络应用带来不安全的因素,但Cookies文件本身并不会造成用户隐私的泄露,也不会给黑客提供木马程序的载体,只要合理使用,它们会给网站管理员进行网站的维护和管理以及广大用户的使用都带来便利。
Cookies集合具有以下几种属性: 1.Expires属性:此属性用来给Cookies设置一个期限,在期限内只要打开网页就可以调用被保存的Cookies,如果过了此期限Cookies就自动被删除。如: 设定Cookies的有效期到2004年4月1日,到时将自动删除。如果一个Cookies没有设定有效期,则其生命周期从打开浏览器开始,到关闭浏览器结束,每次运行后生命周期将结束,下次运行将重新开始。 2.Domain属性:这个属性定义了Cookies传送数据的唯一性。若只将某Cookies传送给_blank">搜狐主页时,则可使用如下代码: 3.Path属性:定义了Cookies只发给指定的路径请求,如果Path属性没有被设置,则使用应用软件的缺省路径。 4.Srcure属性:指定Cookies能否被用户读取。 5.Haskeys属性:如果所请求的Cookies是一个具有多个键值的Cookies字典,则返回True,它是一个只读属性。
保持session和URL COOKIE都无关啊
====================================================================================如果保持session和URL COOKIE都无关啊,那服务器怎么知道本次请求是属于哪个session的?
在dev2dev找到一文章
Session详解
http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=10
===================================================================================
这篇文章我看了,但是其中有段话是这样说的
“6、如何才能正确的应付客户端禁止cookie的可能性
对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL,具体做法参见[6]
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770”
不知道有多少人这样做了?那还不得累死?是否可以通过服务器端的配置实现?而且我在问题一里面也说过,我禁止了IE的cookie,服务器端没有进行过任何URL重写,依然能够保持session,这又怎么解释呢?
既然服务器第一次会给你的机器上写cookie,那么你就是禁止了cookie,服务器还照样发送cookie信息,不过你的浏览器已经不再向cookie写入或者从本地cookie读取文件罢了
===================================================================================
谢谢你的文章,写的不错^_^
不过你可能没看清楚我的第一个问题,我原来的理解和你说的差不多,我也认为禁止了cookie肯定不会影响服务器发送cookie信息,但是浏览器不保存这些信息。
但是事实是,再第二次访问时(同一个会话中),浏览器依然会发送保存sessionID的cookie!!第一次访问时,服务器端发送带有sessionID信息的cookie,其响应头中有“Set-Cookie: JSESSIONID=aQQxcAtUHWv9; path=/”,而客户端第二次次访问时,IE依然会发送此cookie,内容为“Cookie: JSESSIONID=aQQxcAtUHWv9”。以上这些都是在我禁止了IE的cookie下进行的!当然拉,上面的cookie是会话cookie,保存在内存中,不保存在硬盘上。所以我推测,禁止cookie只能禁止保存在硬盘上的cookie,而不能禁止会话cookie(保存在内存中)!不过我没有理论依据,所以想向大家请教请教^_^
上次用localhost访问本地WEB服务器的时候,的确发现有问题一那样的情况出现;但是换成127.0.0.1访问的话发现两次访问生成的sessionID是不同的,误导了大家,我有罪!!!!
等有时间我会整理出一篇文章的,希望大家原谅!不过localhost的确有些特别,不知道是什么原因!不过还有就是IE只有第一方和第三方cookie的设置,那第二方cookie是什么?有大大知道吗???
但是在服务器端无疑是保存了N组SESSION变量的,每个用户一个
那么服务器如何区分用户呢?
用一随机生成的数字就是SESSIONID了
这个SESSIONID可以保存为COOKIE变量
每次通过读COOKIE变量来确定用户
还有就是每次都在请求的URL上加上此变量
每次通过这个变量来识别
这两种情况都能实现保持客户的状态
但是明显,用COOKIE实现的话可以长期保存,具体时间可在程序中设置
而用GET实现的则只能在一次会话中保存
在ASP编程中,这些东西不会涉及到,因为全部都封装好的
而在PHP中就不得不研究这些东西
----------------------------------------session变量确实是保存在服务器端的,这点毫无疑问的。
但是在服务器端无疑是保存了N组SESSION变量的,每个用户一个
那么服务器如何区分用户呢?
用一随机生成的数字就是SESSIONID了
这个SESSIONID可以保存为COOKIE变量
每次通过读COOKIE变量来确定用户
还有就是每次都在请求的URL上加上此变量
每次通过这个变量来识别
这两种情况都能实现保持客户的状态
但是明显,用COOKIE实现的话可以长期保存,具体时间可在程序中设置
而用GET实现的则只能在一次会话中保存
在ASP编程中,这些东西不会涉及到,因为全部都封装好的
而在PHP中就不得不研究这些东西
cookie里就含有sessionid,也就是cookie是基于 scope=page ,session的 scope=session
大家都要,我也来接点,哈哈~~
什么时候把问题解决了,告诉下,学习ing.