問:我想在一個Actionitem中增加cookIE,然後sendredirect到另一個actionitem在那裡驗證cookIE,有cookIE這顯示一個頁面,否則返回。但我發現增加完cookIE後,如果馬上sendredirect則另一個actionitem取不到cookIE值(說明cookIE增加不成功),若不馬上sendredirect而是response.content:='某一頁面內容',然後用戶點擊連結到另一ActionItem則可以成功讀出cookIE。<?XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:Office" />
答:Cookie是一個Response的頭(header)部分,必須在正文之前設置。如果用SendRedirect,只有新頁面才會傳送,SendRedirect之前設置的Response會取消,導致Cookie不能加到新頁面的頭部分,所以設置Cookie不成功!解決辦法是:永遠不要在設置CookIE後再用SendRedirect。你所說的問題可以這樣解決:在Html中可以加入代碼自動轉到另外一個頁面,我們可以在WebActionItem的OnAction事件中寫入:
Response.Content:='<meta HTTP-EQUIV="REFRESH" CONTENT="1;'+
'URL=http://chen/dll/chat/chatmain.exe/qtchat">'+
'<p></p><p align="center">你的回復已經添加到論壇中了'+
'<br>兩秒鐘後回到論壇首頁</p>';
就可以自動返回URL指向的地址了。
問:我先在CookIE中設定了一個值,然後想修改它,該如何做?
答:首先刪除原來的CookIE中的值,方法是將CookIE的Expires設定為必現在時間早的時間,然後在設定。例如:
//將原來CookIE中的記錄刪除
With Response.CookIEs.Add do begin
Name := 'NickName';
Value := Request.ContentFIElds.Values['NickName'];
Secure := False;
Expires := Now-1;
end;
//將注冊的用戶名作為CookIE中的內容
With Response.CookIEs.Add do begin
Name := 'NickName';
Value := Request.ContentFIElds.Values['NickName'];
Secure := False;
Expires := Now+100;
end;
問:如何通過CookIE保存臨時信息?象一些論壇,在一次浏覽過程中。當你第一次發言時,需要輸入密碼,而以後發言就不需要輸入密碼。而當斷開後再次浏覽就還需要輸入密碼,這樣即方便又保證了安全性.
答:設置這樣的CookIE的方法是不要設定Expires。例如:
//設定臨時CookIEs
with Response.CookIEs.Add do begin
Name := 'TempPassWord';
Value:=sPassWord;
end;
另外我們也可以下載一些專用的設定和讀取CookIE的控件,這些控件支持在Web應用程序中加入類似ASP的Session的功能。下載地址是:http://codecentral.borland.com/