我来回答,你可以打开c:\windows\cookies\ 目录来看看cookies的保存格式
你可以看到一个网站的cookies是用一个文件保存,如果有多个cookies,每个
cookie用分号(;)分隔
 ::第一:while (i<CookieString.length)
::{sta rt=i; 
::end=start+name.length;
::if(CookieString.substring(start,end)==name)
::{isfound=true;
::break;
::}
::i++;
::}
::这个循环根本没有用到,因为CookieString.length长度为9(UserName=),而name
::的长度也为9(也是UserName=,因为由flag传递的);那作者用这个循环的意图是什么?你之所以这样问,是因为 cookie 的name是预先知道的,即flag是预先知道的,所以可以不用
这个循环照样能工作,但作者考虑到通用性(即:有时我们我们在一个页面保存了多个cookie
而且我们并不知道这些cookie的个数,以及每个cookie的name,那么就有必要用循环来确认
这个cookie了)::第二:在程序26行中
::if(isfound==true)
::{start=end;
::end=CookieString.indexOf(";",start);
::if(end<start)                      
::end=CookieString.length;
::return unescape(CookieString.substring(start,end));}::其中end=CookieString.indexOf(";",start);和if(end<start)这是不是多余的,
::为何不直接只写一句话:end=CookieString.length;就可以了?
::因为end=CookieString.indexOf(";",start);得到的结果为-1,因为这里start=end得到的
::结果为9(UserName=)
::end=CookieString.indexOf(";",start);当然找不到;,返回值为-1;这里if
::(end<start)                      
::end=CookieString.length;作者的意图是什么?这句在你的这个程序中是多余的,因为你只有一个cookie,
end=CookieString.indexOf(";",start);当然找不到;,返回值为-1
但如果有多个cookie的话,这句是必不可少的,因为每个cookie之间用;分隔 
end=CookieString.indexOf(";",start) 就肯定找得到,返回值大于1 ::第三:return unescape(CookieString.substring(start,end));中的方法unescape()
::这个解码没像不用也可以得到正确结果呀?你不用unescape是因为你的cookie中没有用到特殊字符如果你用了空隔等特殊字符,不用unescape就可能会出错