《PHP應(yīng)用:解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報(bào)302錯(cuò)誤的方法》要點(diǎn):
本文介紹了PHP應(yīng)用:解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報(bào)302錯(cuò)誤的方法,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:thinkphp教程
PHP實(shí)例最近用ThinkPHP開發(fā)一個(gè)項(xiàng)目,集成了批量上傳文件插件Uploadify,在谷歌Chrome和IE下都能正常上傳,只有火狐下提示這個(gè)錯(cuò)誤,網(wǎng)上找了很多解決辦法,基本都說flash在firefox下重新發(fā)起session會話,由于session沒有驗(yàn)證通過所以報(bào)錯(cuò),這個(gè)問題網(wǎng)上有很多解決方案,但是試了很多,都沒有真正解決我的問題,最后看了官方的解決方案
http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/
才真正解決,我用的是ThinkPHP框架,同時(shí)我開啟了_initialize()(不知道這個(gè)函數(shù)的去看下ThinkPHP幫助手冊),在這個(gè)函數(shù)里,我執(zhí)行了一個(gè)檢測用戶是否登陸的驗(yàn)證函數(shù),這樣每次訪問控制器,都會執(zhí)行驗(yàn)證用戶是否登陸有權(quán)限執(zhí)行相應(yīng)操作,但是因?yàn)樵诨鸷?flash發(fā)起的哀求并沒有連同SESSIONID一同發(fā)送到ThinkPHP控制器,所以導(dǎo)致了無法通過用戶登陸哀求,這時(shí)我們可以在uploadify的formData參數(shù)中定義一個(gè)SESSIONID,這樣就可以通過$_POST或$_GET的方法將SESSIONID發(fā)送到控制器,在控制器把傳遞過去的SESSIONID設(shè)置為當(dāng)前會話的SESSIONID,這樣就可以通過驗(yàn)證了,但是,這里需要注意一條,重新設(shè)置SESSIONID必須要放在執(zhí)行驗(yàn)證登陸函數(shù)的前邊,否則無效,因?yàn)槿绻顷戲?yàn)證不通過,那么后邊的代碼就都不會執(zhí)行了,我之前就犯了這樣的錯(cuò)誤,將重置SESSION放到了上傳文件處理的函數(shù)中,下面貼上詳細(xì)的代碼,以供大家參考:
PHP實(shí)例客戶端(ThinkPHP上傳文件模板)代碼
PHP實(shí)例
$(function()
{
$('#file_upload').uploadify({
'formData'
: {
'<{:session_name()}>'
: '<{:session_id()}>',
//此處獲取SESSIONID
'timestamp'
: '<{$timestamp}>',
'token'
: '<{$token}>'
}
//后邊對于解決本問題無關(guān)代碼省略...
})
}
PHP實(shí)例服務(wù)器端(ThinkPHP控制器)代碼
PHP實(shí)例
//初始化執(zhí)行
public
function
_initialize(){
//此處為解決Uploadify在火狐下出現(xiàn)http
302錯(cuò)誤 重新設(shè)置SESSION
$session_name
= session_name();
if
(isset($_POST[$session_name]))
{
session_id($_POST[$session_name]);
session_start();
}
//執(zhí)行登陸驗(yàn)證檢測函數(shù)
$this->powerverify();
}
PHP實(shí)例為大家分享了我自己親身實(shí)例之外,還在網(wǎng)上找到了其他朋友的實(shí)例進(jìn)行了整理,希望對大家的學(xué)習(xí)有所啟發(fā).
PHP實(shí)例標(biāo)題:PHP Uploadify 火狐下報(bào) 302錯(cuò)誤
大概原因:在Uploadify官網(wǎng)已經(jīng)說明,是說Flash有一個(gè)Bug它提交哀求的時(shí)候不會自動(dòng)帶session,所以瀏覽器判斷沒有獲取到session值,我用的ThinkPHP框架,_initialize(){}(在執(zhí)行其他方法前會先執(zhí)行這個(gè)函數(shù),我用它來判斷用戶是否登錄),在這個(gè)函數(shù)中,我照網(wǎng)上的方法:
基本思路:根據(jù)Flash這個(gè)bug的原理來做的,就是我們把session值作為一個(gè)參數(shù)一起上傳.
Uploadify官網(wǎng)也說了解決之道:給一個(gè)選項(xiàng)
formData: {‘SESSION NAME':'SESSIOIN ID'}----------------json格式
我用隱藏域把這些變量保存在模板中(值可以得到),然后在js文件中我直接寫作:
PHP實(shí)例
var session_name = (使用Jquery通過選擇器獲取得到值)
var session_id = (同上);
formData: {session_name, session_id},
PHP實(shí)例其他解決思路:
這個(gè)問題確實(shí)存在,其實(shí)這個(gè)問題可以轉(zhuǎn)化為session丟失.雖然您針對session進(jìn)行了特殊處理,作為參數(shù)傳入,但是不代表您服務(wù)端正確獲取,建議您進(jìn)入debug模式跟蹤一下服務(wù)器端是否正確獲取參數(shù),并順利加載session.另外還有個(gè)問題,如果您當(dāng)前打開url與您提交form的url是一樣的,還得記得加上隨機(jī)數(shù).
PHP實(shí)例以上就是針對ThinkPHP下使用Uploadify插件火狐上傳報(bào)302錯(cuò)誤的解決辦法,希望對大家的學(xué)習(xí)有所幫助.
《PHP應(yīng)用:解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報(bào)302錯(cuò)誤的方法》是否對您有啟發(fā),歡迎查看更多與《PHP應(yīng)用:解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報(bào)302錯(cuò)誤的方法》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8223.html