1

我有一个名为 user-photo-upload.aspx 的 aspx 和另一个名为 get-photo.aspx 的 aspx。我在 user-photo-upload.aspx 的 page_load 方法中设置了 Session["PhotoId"]。

如果我通过浏览器正常访问user-photo-upload.aspx,可以在get-photo.aspx中检索到session。但是如果flash上​​传照片到user-photo-upload.aspx页面,get-photo.aspx中获取不到Session["PhotoId"]。

我发现使用浏览器正常访问页面或通过闪存访问页面时,会话 ID 不同。我不知道为什么 flash 使用另一个会话。

我应该怎么办?

4

2 回答 2

1

Flash 插件充当单独的客户端,因此浏览器和插件接收单独的会话 ID 都是预期的行为。

您必须通过将原始会话 ID 设置为 Flash 电影中的变量(作为 FlashVar 或通过 JavaScript)来解决此问题,然后将其作为 GET 参数与发出的第一个请求一起发送到服务器,并替换新的为 Flash 客户端创建的 ID,具有提供给服务器的 ID。

这个问题与Java中的相同问题有关,也许它可以帮助您解决问题。

于 2011-03-17T16:26:25.603 回答
0

我们在使用 Flash Uploader 时遇到了同样的问题。我们就是这样解决的...

(1)session_id我们在Flash Uploader的客户端初始化代码中增加了一个新参数:

<script type="text/javascript"> 
   var swfu<%=RandomId %>;
   $(document).ready(function() {
      swfu<%=RandomId %> = new SWFUpload({
    // Backend Settings
    upload_url: "./picupload.aspx",
    post_params : {                    
         "PictureCategory" : "<%= EncryptedPictureCategory() %>",
         "picture_id": "<%= EncryptedPictureId() %>",
         "session_id": "<%= HttpContext.Current.Session.SessionID %>"
     },
     // *snip* ...
</script>

(2)我们将 Session_Start 方法更改Global.asax.cs为接受来自请求的会话 ID:

protected void Session_Start(Object sender, EventArgs e)
{
    if (Request["session_id"] != null)
    {
        bool isRedirected, isCookieAdded;
        string oldSessionId = Request["session_id"];
        SessionIDManager manager = new SessionIDManager();
        manager.RemoveSessionID(HttpContext.Current);
        manager.SaveSessionID(HttpContext.Current, oldSessionId, out isRedirected, out isCookieAdded);
    }
    else
    {
        Response.Redirect(LoginPagePath);
    }
}
于 2014-02-12T09:00:28.473 回答