在 Flash 中設定以及讀取 cookies 是有必要的,例如可以在 Flash 檔案中提供網站個人化。
Flash 不支援直接的設定以及讀取 cookies。因此,一般就是使用 JavaScript 或是 ASP scripts 設定以及讀取 Cookies。除了別的以外,另一好處是 Flash 即時是沒有 JavaScript 功能下仍能存取 cookies。
Flash 檔案
在下面描述了 Flash 檔案可以設定以及讀取 cookies,該檔案呼叫 ASP Scripts
testCookies.asp,
setCookies.asp 以及
getCookies.asp 經由 ASP 來存取在瀏覽器中的 cookies。
Flash 檔案會測試獲得許可來設定客戶端的 cookies 以及允許使用儲存於 cookies 中的資料,檔案也可以讀取 cookies 內容且呈現在螢幕上。
下載中有二個檔案:一個是英文的 .fla ,另一檔案是用德文。編譯檔 .swf 僅是德文。
使用者介面
使用者介面分為以下三個部分來作說明:
圖一:Flash 中的使用者介面 Step 1:
使用者按下 'START TEST' 按鈕會在 server 引發測試是否網頁的來訪者的瀏覽器接受 cookies。Status message 會現顯是否接受 cookies。
Step 2:
在這例子 cookies 會被接受,Flash movie 執行到第二的部分,並等待資料被儲存在 cookie。按一下 'SEND DATA' 按鈕,資料會傳送到 server。
Step 3:
最後部分,server 將 cookie 資料送回 Flash 檔案,會將它們寫入文字欄位 (text fields)。
Flash 檔的 Scripts
Flash 檔的圖案是根據標準的程序建立的,因而無法詳細來描述。
名稱 '
Sourcecode' 的圖層 (layer) 是重要的,包含Flash 檔案的程式碼,我們現在就來詳細說明。
圖二: Flash 中的時間軸 //Frame 1Set Variable: "cookies" = "false"stop
變數 '
cookies' 被初始化為字串 '
false',當 server 不回傳布林值
true 和
false 時,會使用 '
false'。但字串含有值 "
true" 或 "
false" 時,Flash 就等待按鈕來啟動 cookie 測試。
//Frame 2, Label step1Load Variables ("/testcookies.asp", 0)
檔案 '
testcookies.asp' 被呼叫以及回傳 '
true' 或 '
false' (接受 Cookies 或不接受 Cookies).
//Frame10 If (cookies eq "true") Set Variable: "cookietest" = "Cookies can be set"Stop Else Set Variable: "cookietest" = "Cookies not allowed. Please enable." Go to and Stop ("nocookies")End If
在 Frame 10 狀態欄會依測試結果展現出不同訊息。
如果不接受 cookies,Flash 就會跳到標籤 '
nocookies',停在那裡,而且除了另外的 cookies 測試外不接受任何的輸入。在
if 條件據
cookies eq "true" 用引號設定,因為 server並部會真正的傳回布林值
true 或
false,但是字串就其本身卻能馬上測試。同時注意字串的比較必須是使用 '
eq' 而不是 '
='。
'stop' 命令使得 Flash 必須等待 'SEND DATA' 按鈕 click 事件。將 cookie 資料送到 server 端會像這樣 :
//Frame11, Label step2Load Variables ("/setcookies.asp?cookiename="&name&"&"&"cookiemail="&email&"&"&"cookietelephone="&telephone, 0)
這個 script 中,請求字串 (query string) 包含使用者輸入的資料會送到檔案 '
setcookies.asp'。關於字串的組成,請參考文章 'Data Exchange between ASP and Flash' (僅德文)。
//Frame19, Label step3Load Variables ("/getcookies.asp", 0)
ASP 從 cookie 中讀取資料會被載入 Flash 檔案中。
//Frame 28Stop
在短暫的線段動畫後,載入的資料會呈現在文字欄位 (text fields)。
//Frame 35, Label nocookiesstop
如果在 frame 10 不允許任何的 cookies,Flash 時間軸會分入到這個 frame,而使用者就有機會執行另外的測試。
ASP 檔案的 Scripts
這三個檔案
testcookies.asp,
setcookies.asp 以及
getcookies.asp 會被 Flash 呼叫執行以下動作: 檢查瀏覽器是否接受 cookies (
testcookies.asp),設定 cookies (
setcookies.asp),讀取 cookies(
getcookies.asp)。
檢查瀏覽器是否接受 cookies
檔案 testcookies.asp 檢查瀏覽器是否允許 cookies。 這個技巧與這篇文章 "Simple Browser Cookie Test" (僅德文) 是一樣的技巧。在這裡所使用的 script 如下:
<%strTest = Request.QueryString("CookieTest")If UCase(strTest) <> Ucase("true") Then ' First call ' Set session variable Session("__FlashCookieTest") = True ' Redirect with QueryString strURL = Request.ServerVariables("SCRIPT_NAME") strQueryString = "?CookieTest=true" Response.Redirect(strURL & strQueryString) Response.EndElse ' Redirect already happened ' Check whether the session variable contains the value If Session("__FlashCookieTest") = True Then ' Session variable contains value ' Thus browser accepts cookies strOut = "Cookies=true"Else ' Session variable is empty ' Thus browser does not accept cookies strOut = "Cookies=false"End IfEnd If' Output to Flash:Response.Write(strOut)%>
簡單的說,這個 script 設定一個 session 變數,執行轉跳 (redirect) 到它自己本身,然後檢查該值是否還設定在 session 變數中。為了讓值仍然保存,瀏覽器必須已經接受 Internet Information Server (IIS) 的 session cookie,然後再由 ASP 送到瀏覽器。這意味著,瀏覽器接受 cookies ,當這個 session 變數的值在轉跳 (redirect) 之後仍然還存在著。
如果瀏覽器接受 cookies,該檔案會傳回文字 '
Cookies=true' 或是不接受的話,則傳回 '
Cookies=false'。
當 Flash 藉由命令
Load Variables 來呼叫檔案
testcookies.asp,ASP 檔案會傳回字串 "
Cookies=true" 或 "
Cookies=false" 到 Flash 檔案,然後在 Flash 中設定該變數
Cookies 為 "
true" 或 "
false" 。
設定 Cookies
在 ASP 中 cookies 可以很容易使用
Response.Cookies 集合設定。在我們的例子中,這個 Flash 檔案呼叫檔案
setcookies.asp ,然後傳送在 Querystring 中 cookies (names and values) 變數到 ASP Script。
ASP Script 會從 Querystring 集合讀取所有的值,藉由
Response.Cookies 送出對應的 cookies 到瀏覽器。整個 ASP script 只有三行:
<%For each item in Request.QueryStringResponse.Cookies(item) = Request.Querystring(item) Next%>
讀取 Cookies
讀取 Cookies 以及將它們寫入 Flash 檔案中就像設定 cookies 一樣簡單,當 Flash 檔案呼叫檔案
getcookies.asp,會以 URL 編碼文字傳回所有的 cookies 的名稱和值。這樣一來, 當 Flash 呼叫檔案
getcookies.asp,cookies 的值會寫入 Flash 檔案同樣名稱的變數中
ASP 檔案
getcookies.asp 如下:
<%For each cookie in Request.Cookies strOut = strOut & Server.URLEncode(cookie) & "=" strOut = strOut & Server.URLEncode(Request.Cookies(cookie)) strOut = strOut & "&"NextResponse.Write strOut%>
結論
這篇文章的 Flash 部分是使用 Flash 4,對於 Macromedia 軟體新的版本 Version 5 的整個系統架構是同樣的。
ASP 部分可以在 IIS 4.0 以及 IIS 5.0 上來執行,且只要稍作修改也能在 ASP.NET 上執行。
在這篇文章描述了與 ASP 有關的 cookies 設定以及讀取,在之後會有一篇文章,將藉由目前這個 Flash 中使用 cookies 的簡單個人化設定基本架構,做更進一步來發展。
……