gpt4 book ai didi

asp.net-mvc - 使用 ASP.NET MVC 上传( session 和身份验证)

转载 作者:行者123 更新时间:2023-12-02 04:10:52 26 4
gpt4 key购买 nike

当我对 uplodify ( http://www.uploadify.com/ ) 使用的操作或 Controller 使用授权过滤器时,无法访问该操作...

此外, session 不会被检索。

我发现这是为了检索用户 session :

http://geekswithblogs.net/apopovsky/archive/2009/05/06/working-around-flash-cookie-bug-in-asp.net-mvc.aspx

但是如何将其与[Authorize]过滤器和检索的 session 一起使用?

最佳答案

为了纠正这个问题,我向您建议一个解决方案...使用 uploadify 发送身份验证 cookie 值和 session id cookie 值,并在检索 session 之前重新创建它。

这是在 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 中:

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

关于asp.net-mvc - 使用 ASP.NET MVC 上传( session 和身份验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com