Asp.net mvc 使用ASP.NET MVC上载(会话和身份验证)

Asp.net mvc 使用ASP.NET MVC上载(会话和身份验证),asp.net-mvc,authentication,session,uploadify,Asp.net Mvc,Authentication,Session,Uploadify,当我在uplodify()使用的操作或控制器上使用Authorize filter时,操作无法到达 此外,不会检索会话 我发现检索到以下用户会话: 但是如何将其与[Authorize]筛选和检索会话一起使用?要更正此问题,我建议您一个解决方案。。。使用uploadify发送身份验证cookie值和会话id cookie值,并在检索会话之前重新创建它 以下是要在视图中实现的代码: <script> var auth = "<% = Request.Cookies[For

当我在uplodify()使用的操作或控制器上使用Authorize filter时,操作无法到达

此外,不会检索会话

我发现检索到以下用户会话:


但是如何将其与
[Authorize]
筛选和检索会话一起使用?

要更正此问题,我建议您一个解决方案。。。使用uploadify发送身份验证cookie值和会话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 }
    });
瞧,用这种方法,它是完全透明的

希望对你有所帮助!!;)


已编辑:使用formData而不是scriptData

此解决方案非常有效。如果有人需要,我将代码翻译成vb:

受保护的子应用程序\u BeginRequest(ByVal sender作为对象,ByVal e作为System.EventArgs)
'我们猜测此时应用程序尚未检索会话,因此我们使用会话id重新创建cookie。。。
尝试
Dim session_param_name=“aspsessiond”
Dim会话\u cookie\u name=“ASP.NET\u会话ID”
如果不是HttpContext.Current.Request.Form(会话参数名称)则为空
UpdateCookie(会话\ cookie \名称,HttpContext.Current.Request.Form(会话\参数\名称))
ElseIf不是HttpContext.Current.Request.QueryString(会话参数名称)则为空
UpdateCookie(会话\ cookie \名称,HttpContext.Current.Request.QueryString(会话\参数\名称))
如果结束
特例
结束尝试
尝试
Dim auth_param_name=“AUTHID”
Dim auth_cookie_name=FormsAuthentication.FormsCookieName
如果不是HttpContext.Current.Request.Form(auth_param_name)则什么都不是
UpdateCookie(auth_cookie_name,HttpContext.Current.Request.Form(auth_param_name))
如果不是HttpContext.Current.Request.QueryString(auth_param_name)则什么都不是
UpdateCookie(auth_cookie_name,HttpContext.Current.Request.QueryString(auth_param_name))
如果结束
特例
结束尝试
端接头
私有子更新cookie(ByVal cookie_名称作为字符串,ByVal cookie_值作为字符串)
Dim cookie=HttpContext.Current.Request.Cookies.Get(cookie\u名称)
如果曲奇什么都不是
cookie=新的HttpCookie(cookie\u名称)
如果结束
cookie.Value=cookie\u值
HttpContext.Current.Request.Cookies.Set(cookie)
端接头
下面是javascript变量赋值部分:

var auth=”“;
var ASPSESSID=“”;
也许在VB中工作的人可以从中受益。

对于VB转换代码
*使用此站点启动代码块用于问答。回答您自己的问题或将知识库类型的文章放在这里是很好的,但是将它们以问题的形式表达出来,然后在答案中用您的解决方案回答它们。您不能在MVC中使用AuthorizeAttribute和Session state吗?你确定吗?索什,是我写的吗?的确,这非常有用:谢谢你。我想问题一定涉及Flash检索会话cookie的方式(如果有的话),但我只是不知道到底发生了什么,直到我看到这一点,我才意识到你可以用这种方式更新传入的cookie。谢谢你,你是个英雄将sessionId放在脚本中是一个坏主意,因为它容易被会话劫持(除非您通过SSL提供脚本)。@Adam Nofsinger-这是真的,但无需进一步开放自己。使用cookies,您可以将它们设置为HTTPOnly(我知道不是完全证明),但使用脚本,您可以向恶意js打开自己。下面是一个类似的响应——它不要求会话ID出现在js中。对不起,我不是故意挑三拣四,你的回答很好(帮了我),但我最近做了一点安全研究,它引起了我的注意。+1000真的帮了我的忙-999表示有两个空的
catch
子句。伤害了我的眼睛…更新版本Uploadify的formData而不是scriptData
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);
    }
var auth='<%# IIf(Request.Cookies(FormsAuthentication.FormsCookieName) Is Nothing, "", 
     Request.Cookies(FormsAuthentication.FormsCookieName).Value)%>';

var ASPSESSID = '<%# Session.SessionID%>';