jQuery アップロード プラグイン Uploadify_jquery の Http Error 302 エラーを解決する方法

WBOY
リリース: 2016-05-16 15:24:48
オリジナル
1915 人が閲覧しました

以前、jquery Uploadify アップロード プラグインの使用方法を紹介しましたが、使用中に Http Error 302 エラーの問題が発生したので、ここに記録します。 まず、http 302 はリクエストがリダイレクトされたことを意味します。これは理解しやすいですが、uploadify 処理のアップロード スクリプトにセッション検証がある場合、Flash にはポスト リクエストの実行時に Cookie 情報が含まれていないため、このエラーが発生します。 session はクライアントの Cookie に基づいて SESSIONID を取得します。当然、Cookie を送信せずにセッションを取得することはできず、uploadify は 302 (リクエスト リダイレクト) エラーを返します。

解決策:

session_id の値をサーバーに送信します:


<script>
$(document).ready(function() { 
   $('#file_upload').uploadify({ 
    'uploader' : 'uploadify/uploadify.swf', 
    'script'  : 'uploadify.php',
    'folder'  : 'uploads/file', 
    'formData': { 'session': '<&#63;php echo session_id();&#63;>'}, 
    'onComplete' : function(event, ID, fileObj, response, data) { 
     alert(response); 
    } 
   }); 
}); 
</script>
ログイン後にコピー
その後、サーバー側のセッション検証の前に:


if (isset($_POST['session'])){ 
  session_id($_POST['session']); 
  session_start();//注意此函数要在session_id之后 
} 
ログイン後にコピー
もちろん、URL でセッション ID を直接渡すこともでき、HTTP エラー 302 エラーを解決できます。

問題の拡張: uploadify3.1 IEを使用したMVC下の通常のFirefoxおよびChromeでもHTTPERROR 302エラーが発生します。解決策はありますか?

jquery Uploadify は IE で通常どおりアップロードできます。非同期アップロードを実装すると、アップロード時に各ファイルがサーバーにリクエストを送信します。各リクエストには、セキュリティ検証、セッションおよび Cookie の検証が必要です。はい、それだけです。 jquery Uploadify はフラッシュを使用してアップロードを実装するため、データ フロー リクエストがバックグラウンドに送信されるたびに、IE はローカル Cookie ストレージを自動的にバンドルしてサーバーに送信します。しかし、Firefox と Chrome はこれを行わず、安全ではないと考えるでしょう。

まず、次のコンテンツを global.asxa に追加する必要があります


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);
    }
ログイン後にコピー
初期化ページのアップロードプラグインのコードは次のとおりです


<script type="text/javascript">
    var auth = "@(Request.Cookies[FormsAuthentication.FormsCookieName]==null &#63; string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value)";
    var ASPSESSID = "@Session.SessionID";

    $(function () {
      $('#upload').uploadify({
        'formData': { 'folder': '/Upload', 'ASPSESSID': ASPSESSID, 'AUTHID': auth },
        'buttonText': '浏览',
        'buttonClass': 'browser',
        'fileSizeLimit' : '100KB',
        'fileTypeExts': '*.xls;*.xlsx',
        'removeCompleted': false,
        'swf': '@Url.Content("~/Scripts/Uploadify/uploadify.swf")',
        'uploader': '/Upload',
        'onUploadSuccess': function (file, data, response) {}
      });
    });
  </script>

ログイン後にコピー
問題の研究は多岐にわたる可能性があり、専門的な知識を柔軟に学び、専門的なスキルを習得できるように、1 つの例から推論することを学ぶ必要があります。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!