当我对 uplodify ( http://www.uploadify.com/ )使用的操作或控制器使用授权过滤器时,无法执行操作...
此外,不会检索会话。
我发现这是检索到的用户会话:
但是如何将它与[Authorize]
过滤器和检索会话一起使用?
当我对 uplodify ( http://www.uploadify.com/ )使用的操作或控制器使用授权过滤器时,无法执行操作...
此外,不会检索会话。
我发现这是检索到的用户会话:
但是如何将它与[Authorize]
过滤器和检索会话一起使用?
为了纠正这个问题,我向您建议一个解决方案...使用 uploadify 发送 auth cookie 值和 session id cookie 值,并在检索会话之前重新创建它。
这是要在视图中实现的代码:
<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 :
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);
}
瞧,用这种方法它是完全透明的。
希望对您有所帮助!!;)
已编辑:使用 formData 而不是 scriptData
这个解决方案效果很好。如果有人想要,我将代码翻译成 vb:
Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
'we guess at this point session is not already retrieved by application so we recreate cookie with the session id...
Try
Dim session_param_name = "ASPSESSID"
Dim session_cookie_name = "ASP.NET_SessionId"
If Not HttpContext.Current.Request.Form(session_param_name) Is Nothing Then
UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form(session_param_name))
ElseIf Not HttpContext.Current.Request.QueryString(session_param_name) Is Nothing Then
UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString(session_param_name))
End If
Catch ex As Exception
End Try
Try
Dim auth_param_name = "AUTHID"
Dim auth_cookie_name = FormsAuthentication.FormsCookieName
If Not HttpContext.Current.Request.Form(auth_param_name) Is Nothing Then
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form(auth_param_name))
ElseIf Not HttpContext.Current.Request.QueryString(auth_param_name) Is Nothing Then
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString(auth_param_name))
End If
catch ex As Exception
End Try
End Sub
Private Sub UpdateCookie(ByVal cookie_name As String, ByVal cookie_value As String)
Dim cookie = HttpContext.Current.Request.Cookies.Get(cookie_name)
If cookie Is Nothing Then
cookie = New HttpCookie(cookie_name)
End If
cookie.Value = cookie_value
HttpContext.Current.Request.Cookies.Set(cookie)
End Sub
这是javascript变量赋值的部分:
var auth = "<%=IIf(Request.Cookies(FormsAuthentication.FormsCookieName) Is Nothing, "", Request.Cookies(FormsAuthentication.FormsCookieName).Value)%>";
var ASPSESSID = "<%=Session.SessionID%>";
也许在 VB 工作的人可以从中受益。
对于 VB 转换的代码 *以 <%# 而不是 <%= 开始代码块
IE
var auth='<%# IIf(Request.Cookies(FormsAuthentication.FormsCookieName) Is Nothing, "",
Request.Cookies(FormsAuthentication.FormsCookieName).Value)%>';
var ASPSESSID = '<%# Session.SessionID%>';