почему идентификатор сессии меняется в Firefox - PullRequest
1 голос
/ 20 марта 2011

Я использую uploadify для загрузки своих файлов, и я хочу сохранить файлы, и я хочу сохранить путь в базе данных, поэтому я сохраняю путь в сеансе и после того, как пользователь отправит форму. Он работает в Internet Explorer, но в Firefox не работает из-за изменения идентификатора сессии.

Как решить эту проблему?

1 Ответ

2 голосов
/ 21 марта 2011

Плагин uploadify не отправляет куки, поэтому сервер не может идентифицировать сеанс.Одним из возможных способов достижения этого является использование параметра 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...