ファイルをアップロードするためにuploadifyを使用しています。ファイルを保存し、パスをデータベースに保存したいので、セッションでパスを保存し、ユーザーがフォームを送信した後に保存します。Internet Explorer では動作しますが、セッション ID が変更されたため、Firefox では動作しません。
この問題を解決するには?
ファイルをアップロードするためにuploadifyを使用しています。ファイルを保存し、パスをデータベースに保存したいので、セッションでパスを保存し、ユーザーがフォームを送信した後に保存します。Internet Explorer では動作しますが、セッション ID が変更されたため、Firefox では動作しません。
この問題を解決するには?
uploadify プラグインは Cookie を送信しないため、サーバーはセッションを識別できません。これを実現する 1 つの可能な方法は、scriptData
パラメーターを使用して、sessionId を要求パラメーターとして含めることです。
<script type="text/javascript">
$(function () {
$('#file').uploadify({
uploader: '<%= Url.Content("~/Scripts/jquery.uploadify-v2.1.4/uploadify.swf") %>',
script: '<%= Url.Action("Index") %>',
folder: '/uploads',
scriptData: { ASPSESSID: '<%= Session.SessionID %>' },
auto: true
});
});
</script>
<% using (Html.BeginForm()) { %>
<input id="file" name="file" type="file" />
<input type="submit" value="Upload" />
<% } %>
これにより、ASPSESSID パラメータがファイルとともに要求に追加されます。次に、サーバー上でセッションを再構築する必要があります。Application_BeginRequest
これは、 のメソッドで実行できますGlobal.asax
。
protected void Application_BeginRequest(object sender, EventArgs e)
{
string sessionParamName = "ASPSESSID";
string sessionCookieName = "ASP.NET_SessionId";
if (HttpContext.Current.Request[sessionParamName] != null)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[sessionCookieName];
if (null == cookie)
{
cookie = new HttpCookie(sessionCookieName);
}
cookie.Value = HttpContext.Current.Request[sessionParamName];
HttpContext.Current.Request.Cookies.Set(cookie);
}
}
最後に、アップロードを受信するコントローラ アクションでセッションを使用できます。
[HttpPost]
public ActionResult Index(HttpPostedFileBase fileData)
{
// You could use the session here
var foo = Session["foo"] as string;
return View();
}