使用 ASP.NET MVC 上传(会话和身份验证) [英] Uploadify (Session and authentication) with ASP.NET MVC
问题描述
当我对 uplodify 使用的操作或控制器使用授权过滤器时 (http://www.uploadify.com/) 操作未达到...
When I use Authorize filter on an action or a controller used by uplodify (http://www.uploadify.com/) the action isn't reach...
此外,不会检索会话.
我发现这是检索用户会话:
I found this to retrieved user session :
但是如何将它与 [Authorize]
过滤器和检索到的会话一起使用?
But how to use it with [Authorize]
filter and retrieved session ?
推荐答案
为了解决这个问题,我向您提出了一个解决方案...使用uploadify 发送auth cookie 值和会话ID cookie 值,并在检索会话之前重新创建它.
To correct this I propose you a solution... Send the auth cookie value and session id cookie value with uploadify and recreate it before session is retrieved.
>
这是在视图中实现的代码:
here is the code to implent in the view :
<script>
var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>";
var ASPSESSID = "<%= Session.SessionID %>";
$("#uploadifyLogo").uploadify({
...
formData: { ASPSESSID: ASPSESSID, AUTHID: auth }
});
然后在 Global.asax 中:
And then in 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);
}
瞧,使用这种方法它是完全透明的.
And voila, with that method it's totally transparent.
希望对大家有所帮助!!;)
hope it help some!! ;)
已编辑:使用 formData 而不是 scriptData
EDITED : use formData instead of scriptData
这篇关于使用 ASP.NET MVC 上传(会话和身份验证)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!