比如在我们电脑上有很多这样的cookie文件:
Cookie:administrator@www.taoshuwang.com/
Cookie:administrator@freeoz.org/
Cookie:administrator@126.com/
它是按什么规则命名这个cookie文件的呢?
[b]问题补充:[/b]
Cookie:administrator@www.chesi.cn/ 这个cookie后边网址是一个朋友的博客
我可没有登录,它也能在我电脑上写入cookie吗?
我没需要加入登录有效期。
[b]问题补充:[/b]
我现在自己写了一个cookie
Cookie cookie1=new Cookie("username","mandy");
cookie.setMaxAge(1*24*60*60);
response.addCookie(cookie);
这个cookie是在本机上调试的。
这个cookie文件应该具有的名字是什么?
[b]问题补充:[/b]
To:jones (高级程序员)
我确实在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files 看我我写入一个一个cookie文件
,我奇怪的是,我写入了俩cookie,这俩cookie竟然都在这个叫:Cookie:administrator@localhost/myfirst/ cookie文件里。
而且,奇怪的是,我读出来的cookie数量竟然是三个,我明明就写入两个cookie啊
这个cookie文件的内容是:
username 注释: ------------cookie1
mandyyuan
localhost/myfirst/
1024
4059366144
29968486
3376278912
29967078
*
enpid 注释:-------------------------------cookie2
39
localhost/myfirst/
1024
4059366144
29968486
3376278912
29967078
*
[b]问题补充:[/b]
To:jones (高级程序员)
您先别急,刚吃完饭,待我测试下才给分。
[b]问题补充:[/b]
我的问题还没有解决。我是问,我明明写入俩cookie,在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files下,也就看到一个名叫:Cookie:administrator@localhost/myfirst/ 的cookie文件,可为什么读cookie的时候,读cookie个数为3个,而不是2个呢?
[b]问题补充:[/b]
cookie文件中的cookie对象个数的问题明白。
我在action中写了俩cookie对象,在action转到的jsp页面上,读cookie用out.println()打印cookie的名字,当转到jsp页面上的时候打印出来的名字是和值是:
JSESSIONID==DBF24D3896E866C8E54F8B4B5E00DD1B
我想这个就是你说的浏览器写入的那个cookie。
可是,我自己写入的那俩cookie没有打印出名字和值来,必须,我刷新一下这个
http://localhost:8080/myfirst/enpaction.do?actionType=enplogin 才能打印出,我自己写入的2个cookie的名字和值。
username==mandyyuan
enpid==39
比较奇怪!!
[b]问题补充:[/b]
To:jones (高级程序员)
你太神了。
这个问题也很简单啊,因为你的request中只是包含浏览器那个默认的,你在Action中写的两个Cookie还在response中睡觉呢,只有response发送到客户端后才会再次被浏览器再下一个request中添加上的,所以你刷新的时候浏览器发送给服务器的request中才会包含你那两个Cookie
这个cookie文件名跟浏览器有关,不同浏览器实现是不同的,你这个是IE下面的
这个文件名只有浏览器再用,每个浏览器都会有默认的一套命名规范的,你无法操作这个命名过程
(1)Cookie是在本地Cookie文件中保存一些信息,Cookie文件中保存的是键值对(key-value)。Cookie文件存放于你本地计算机系统盘的Document and Settings/用户名 目录下。如果你访问的网站的名称为www.abc.com,那么一般来说,Cookie文件的名称为 用户名@abc.com,你可以自己打开文件夹看一看。你提到的getName获得的是保存在Cookie文件中某一个Cookie的key值。
(2)ServletContext一般在servlet中使用,它的范围和JSP隐含变量application的范围是相同的,所有网站客户共享同一个ServletContext。
(3)request.getParameter()是错误的!getParameter()方法用于获取页面之间传递的参数,要想获取scope(page,request,session,application)范围的对象值,请使用getAttribute()方法。
[quote]我可没有登录,它也能在我电脑上写入cookie吗? [/quote]
当然了,写入cookie不需要登录,我从来都没有登录到淘宝啊,当当网啊,但是每次它都能告诉我我都浏览过哪些书,哪些商品,只要服务器端给你写cookie,就一定会产生这个文件的
这个简单,直接把你的浏览器缓存清楚一下,然后运行下程序看看不就知道了吗!
C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
把这个隐藏的文件夹中内容清空,然后运行一下程序,看看这个多了啥
呵呵,每一个服务器端的session对应一个cookie,你每重启一次服务器或打开一个新的浏览器都会有一个新的session,所以也会写入一个新的cookie文件,BT:既然问题已经明了,我等着接分呢,嘿嘿 :oops:
这个原因很简单,你在程序中不管你写入几个Cookie(通过API),都会存到一个文件中去,这个文件中还包含一个浏览器自动写入的Cookie,就算你程序中没有往客户端写入cookie,浏览器也会写入一个,浏览器每次发送请求的时候都会从这个里面拿到sessionId放到你的request中的;[color=red]一个Cookie文件并不表示你程序中只能通过API获取到一个Cookie对象[/color],文件中有多个,永远都是你自己通过API写入的+1,多出来的一个就是浏览器写入的sessionId
客户端和服务器端的用户对应都是通过sessionId进行的,默认浏览器会把它当作一个Cookie放到Cookie文件中,这些都是默认行为,当然,sessionId还可以通过URL重写机制完成,不过那个需要程序中自己弄,浏览器就默认把sessionId存到cookie文件中
你从Action-->jsp页面还都是在服务器端折腾,你的request对象中并没有你从Action中添加的那两个
请结贴,我等着接分呢