今天在使用SWFUpload使用批量上傳時候,意外發現提交後火狐、chrome裏用戶信息的COOKIES都讀不出來了。服務器文件單獨執行倒是能夠。
認真谷歌了一下,發現以下文章(http://www.courseol.com/cs/html/51/n-3451.html):感謝:
使用SWFUpload的時候必定要當心cookie bug: html
在非IE內核內核的瀏覽器下使用SWFUpload上傳文件時,該請求會忽略自身瀏覽器中的全部cookie,只會將IE瀏覽器下的屬於該域的持久cookie(persistent cookies)發送到服務端,非持久cookie( Session only)不會被髮送。遺憾的是此Bug並不是是SWFUpload內部實現的問題(全部的Flash上傳都會存在此bug),而是FlashPlayer的bug,全部使用FileReference類上傳文件時會存在此問題。幸運的是咱們有辦法繞開此陷阱。 chrome
假設一種使用場景,用戶登陸系統之後,咱們會在cookie中寫入一個非持久的key值來判斷用戶身份。當用戶使用SWFUpload上傳文件的時候,服務端程序經過Requeset中的cookie來判斷用戶身份。在IE下咱們的功能正常,但在FF下你會發現服務端腳本從Request中取到的cookie是空的,這就是不少人遇到的cookie丟失。前面我也提到了非IE內核的瀏覽器忽略了自身的全部cookie。 瀏覽器
假如用戶同時在IE下登陸了另一個帳號,而且選擇了記住帳號,那麼咱們的程序邏輯可能會寫入一個持久的key值。而後用戶在FF下上傳照片,服務端是接受到cookie中的key值了,但遺憾的是此key是IE下登陸帳號的cookie,一不當心這就形成了用戶身份判斷錯誤的bug,A用戶傳了張照片竟然是屬於B用戶的。 服務器
解決方法: cookie
幸運的是AS3提供的URLRequest對象來包裝客戶端請求,咱們能夠上傳文件的同時,給請求添加POST值對。所以當咱們的上傳程序須要依賴客戶端cookie的時候,咱們能夠在上傳開始前使用JS將咱們須要的cookie讀取出來,而後使用SWFUpload提供的addPostParam方法添加到POST中去,服務端從POST中接受所須要的"cookie"值便可,再也不依賴Request中的cookie機制。
因而針對個人頁面: post
post_params: { "VisitorID" : <% =VisitorID%> }
服務器端不使用獲取COOKIES方法而是Request2.Form("VisitorID")
這樣才解決了問題。 spa