西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)ASP.NET → .NET中jquery文件上傳uploadify插件session丟失的解決方法

.NET中jquery文件上傳uploadify插件session丟失的解決方法

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/4/11 23:06:54字體大小:A-A+

作者:西西點(diǎn)擊:1653次評(píng)論:2次標(biāo)簽: jquery

  • 類型:編程輔助大小:109KB語(yǔ)言:中文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載

基于jQuery和Flash的多文件上傳插件uploadify的確很好用。但今天在用這個(gè)插件的時(shí)候遇到了一個(gè)非常頭痛的問(wèn)題,上傳文件的時(shí)候,我后臺(tái)的session突然都丟失了,我進(jìn)入調(diào)試去查看session變量發(fā)現(xiàn)為null。悲劇,難道我不能用這個(gè)插件了嗎?當(dāng)然不可能,這么好的東西當(dāng)然要用起來(lái),于是就去找解決方案了。
終于,答案有了,原來(lái)一般情況下(非IE瀏覽器),因?yàn)橹T如uploadify,swfupload采用的都是flash客戶端,這樣它們產(chǎn)生的useragent與用戶使用瀏覽器的 user-agent必然不同。所以,雖然用戶登錄了你的系統(tǒng)產(chǎn)生了一個(gè)session,但是當(dāng)觸發(fā)上傳程序時(shí)會(huì)產(chǎn)生另一個(gè)session(在上述 useragent選項(xiàng)開(kāi)啟的情況下)。所以,不是session丟失了,而是當(dāng)你上傳文件時(shí),CI為uploadify另外創(chuàng)建了一個(gè)session。好了,既然找到問(wèn)題的根源,我們就想辦法讓服務(wù)器在session判空之前將session值手動(dòng)傳遞過(guò)去。

在ASP.NET中的解決方案如下:

在上傳的那個(gè)頁(yè)面中加入以下代碼

var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>";

var ASPSESSID = "<%= Session.SessionID %>";

然后初始化插件的代碼改成如下形式

view sourceprint?$("#fileInput1").uploadify({

'uploader': '/Scripts/uploader/uploadify.swf',

'method': 'GET',

'script': '/mystudio/GoUploadAvatar',

'cancelImg': '/Scripts/uploader/cancel.png',

'sizeLimit': 2048000,

'multi': false,

'fileDesc': '選擇jpg,png,gif',

'fileExt': '*.jpg;*.png;*.gif',


'onComplete': function (e, queueId, fileObj, response, data) {


},

'onSelectOnce': function (e, data) {

$('#fileInput1').uploadifySettings('scriptData', { 'ASPSESSID': ASPSESSID, 'AUTHID': auth });

}

});

注意上面有一句,很關(guān)鍵

$('#fileInput1').uploadifySettings('scriptData', { 'ASPSESSID': ASPSESSID, 'AUTHID': auth });

接下來(lái)我們必須在服務(wù)端Session判空并創(chuàng)建之前,將傳遞過(guò)來(lái)的SessonID強(qiáng)制賦給當(dāng)前請(qǐng)求的Cookies,這樣服務(wù)端就認(rèn)為還是原來(lái)的Session傳遞過(guò)來(lái)了。具體做法我們可以在Global.asax文件中加入如下代碼

protected void Application_BeginRequest(object sender, EventArgs e)

{

/* we guess at this point session is not already retrieved by application so we recreate cookie with the session id... */

try

{

string session_param_name = "ASPSESSID";

string session_cookie_name = "ASP.NET_SessionId";



if (HttpContext.Current.Request.Form[session_param_name] != null)

{

UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);

}

else if (HttpContext.Current.Request.QueryString[session_param_name] != null)

{

UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);

}

}

catch

{

}



try

{

string auth_param_name = "AUTHID";

string auth_cookie_name = FormsAuthentication.FormsCookieName;



if (HttpContext.Current.Request.Form[auth_param_name] != null)

{

UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);

}

else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)

{

UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]);

}



}

catch

{

}

}



private void UpdateCookie(string cookie_name, string cookie_value)

{

HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);

if (null == cookie)

{

cookie = new HttpCookie(cookie_name);

}

cookie.Value = cookie_value;

HttpContext.Current.Request.Cookies.Set(cookie);

}


這時(shí)候你訪問(wèn)上傳文件的那個(gè)頁(yè)面時(shí)可能會(huì)報(bào)“會(huì)話狀態(tài)已創(chuàng)建一個(gè)會(huì)話 ID,但由于響應(yīng)已被應(yīng)用程序刷新而無(wú)法保存它”的錯(cuò)誤,這時(shí),你可以在web.config文件改變session的存儲(chǔ)方式,一般默認(rèn)都是以 “inproc”存儲(chǔ)的,我們把它改成stateserver模式,即在system.web節(jié)點(diǎn)下加入

<sessionstate mode="StateServer" stateconnectionstring="tcpip=127.0.0.1:42424" timeout="30"></sessionstate>

OK,問(wèn)題解決,雖然看起來(lái)解決這個(gè)問(wèn)題比較麻煩(不知道在其他網(wǎng)站中怎么弄,至少在.NET中比較麻煩),但這么好的一個(gè)文件上傳插件,這樣做很值得。希望能給遇到同樣問(wèn)題的朋友一點(diǎn)幫助。當(dāng)然如果你有更好的解決方案,可以留言告訴我,不勝感激。

    html編輯器
    (73)html編輯器
    我們做網(wǎng)頁(yè)的時(shí)候最難找的就是編輯器,網(wǎng)上找一個(gè)吧,要不是圖片上傳錯(cuò)誤,就是到處都是錯(cuò)誤,垃圾太多.大家都需要一個(gè)簡(jiǎn)單,速度快的.西西為您提供最好用的編輯器一站式下載編輯器定義編輯器指的是一類編輯制作工具,可自定義窗囗,編輯主題索引,可選擇添搜索頁(yè),無(wú)任何不自由。編輯器哪個(gè)好用小編個(gè)人比較喜歡使用和,這兩款編輯器軟件都有不錯(cuò)的表現(xiàn)。至于編輯器哪個(gè)好用,這就要根據(jù)你的個(gè)人需求去選擇對(duì)應(yīng)的編輯器啦...更多>>
    • UltraEdit-32中文版21.20.1001 中文

      06-29 / 19.5M

      推薦理由:ultraEdit 32 破解版 簡(jiǎn)體中文 內(nèi)有安裝說(shuō)明,完全免費(fèi),無(wú)試用期的。該軟件功能強(qiáng)大,能打開(kāi)各種格式的文件
    • pyscripter x642.5.3 官方最新版

      11-10 / 4.7M

      推薦理由:python編輯器,代碼補(bǔ)全、參數(shù)提示補(bǔ)全工具,這個(gè)工具其實(shí)非常重要,可以大大提高開(kāi)發(fā)效率,減少出錯(cuò)。很滿
    • 快手AAuto Studio10.152 綠色中文免

      02-20 / 8.5M

      推薦理由:快手aauto是由一鶴軟件耗時(shí)四年開(kāi)發(fā)新一代編程語(yǔ)言。完美支持靜態(tài)類型、動(dòng)態(tài)類型,完美支持com、dllapi、re
    • ultraedit64位破解版v22.20.0.49 綠

      03-31 / 37.9M

      推薦理由:UltraEdit是最強(qiáng)大的一款超值文本編輯器!ultraedit64位破解版,適用于Windows64位系統(tǒng)使用,此版為綠色破解
    • Dreamweaver cs6中文版官方原版

      11-19 / 279.7M

      推薦理由:AdobeDreamweaverCS6是AdobeCreativeSuite6系列中的HTML編輯器和網(wǎng)頁(yè)設(shè)計(jì)軟件,是最優(yōu)秀的可視化網(wǎng)頁(yè)設(shè)計(jì)工
    • Adobe Dreamweaver CS5官方簡(jiǎn)體中文

      05-15 / 436.8M

      推薦理由:Adobe Dreamweaver CS5 軟件使設(shè)計(jì)人員和開(kāi)發(fā)人員能充滿自信地構(gòu)建基于標(biāo)準(zhǔn)的網(wǎng)站。由于同新的 Adobe CS Li
    dreamweaver cs6
    (14)dreamweaver cs6
    新版本使用了自適應(yīng)網(wǎng)格版面創(chuàng)建頁(yè)面,在發(fā)布前使用多屏幕預(yù)覽審閱設(shè)計(jì),可大大提高工作效率。改善的性能,更高效地傳輸大型文件。實(shí)時(shí)視圖和多屏幕預(yù)覽面板可呈現(xiàn)代碼,更能夠檢查自己的工作。曾經(jīng)風(fēng)靡一時(shí)的網(wǎng)頁(yè)三劍客成員之一是目前應(yīng)用最廣的網(wǎng)頁(yè)制作軟件,原本是由公司所開(kāi)發(fā)的著名網(wǎng)站開(kāi)發(fā)工具,隨被收購(gòu)后,改名為。它是第一套針對(duì)專業(yè)網(wǎng)頁(yè)設(shè)計(jì)師特別發(fā)展的視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具,以及在之后推出的針對(duì)專業(yè)網(wǎng)頁(yè)圖像設(shè)計(jì)的,三者...更多>>
    • Dreamweaver cs6中文版官方原版

      11-19 / 279.7M

      推薦理由:AdobeDreamweaverCS6是AdobeCreativeSuite6系列中的HTML編輯器和網(wǎng)頁(yè)設(shè)計(jì)軟件,是最優(yōu)秀的可視化網(wǎng)頁(yè)設(shè)計(jì)工
    • Dreamweaver cc amtlib.dll補(bǔ)丁

      07-05 / 834KB

      推薦理由:Adobe Dreamweaver CC 13.0 build 6390多語(yǔ)言正式版的破解補(bǔ)丁,破解后程序不再提示剩余天數(shù)與激活注冊(cè)。關(guān)
    • Dreamweaver CS5 HTML 5 擴(kuò)展包

      06-22 / 5.7M

      推薦理由:安裝了該擴(kuò)展后再也不用擔(dān)心不記得難記的css3樣式代碼了! 剛裝 Dreamweaver CS5 的時(shí)候,發(fā)現(xiàn)新建文檔的時(shí)
    • Dreamweaver插件包西西整理

      01-08 / 2.7M

      推薦理由:西西小編整理的一些比較常用的Dreamweaver插件,希望能對(duì)大家有所幫助!persistent_layers 不管滾動(dòng)條如何拉
    • Adobe Dreamweaver CS4中文精簡(jiǎn)版

      04-11 / 84.5M

      推薦理由:使用業(yè)界領(lǐng)先的Web 創(chuàng)作工具之一構(gòu)建世界級(jí)的網(wǎng)站和應(yīng)用程序。Adobe® Dreamweaver® CS4 軟件是 W
    • Dreamweaver jQuery智能提示插件1.

      07-31 / 109KB

      推薦理由:1.2.0版本插件在1.0.0插件基礎(chǔ)上進(jìn)一步修改,版權(quán)信息僅保留致謝信息,刪除作者為了代碼整體提示美觀度,故

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    第 3 樓 江蘇鎮(zhèn)江電信 網(wǎng)友 客人 發(fā)表于: 2014/12/2 9:30:53
    这网站.... 真二,投票竟然能多次重复投....!!!

    支持( 0 ) 蓋樓(回復(fù))

    第 2 樓 廣東教育網(wǎng) 網(wǎng)友 客人 發(fā)表于: 2011/9/7 13:26:04

    引用( 浙江杭州鐵通 客人 2011-5-25 16:30:11

    這網(wǎng)站.... 真二,投票竟然能多次重復(fù)投....!!

    支持( 0 ) 蓋樓(回復(fù))

    第 1 樓 浙江杭州鐵通 網(wǎng)友 客人 發(fā)表于: 2011/5/25 16:30:11
    這網(wǎng)站.... 真二,投票竟然能多次重復(fù)投....。!

    支持( 4 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(2)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)