2009-08-11 5 views
3

jquery.Uploadify을 사용하는 ASP.NET MVC보기에서 내 컨트롤러에 파일을 게시하여 내 응용 프로그램에서 사용하고 Uploadify에서 발견 한 부작용 중 하나가 업로드 파일은 서버 게시물에 대한 컨트롤러에 파일을 제출하는 데 사용됩니다. ASP.NET에서 자체 SessionID를 가져옵니다. 내 업로드 컨트롤러가 세션을 사용하여 내 응용 프로그램에서 향후 조작을 위해 현재 사용자가 업로드 한 파일 목록을 저장하지 않은 경우에도 괜찮습니다. 파일 업로드 후이 문제가 주어진다면 내보기에서 현재 사용자의 세션에는 방금 게시 된 파일이 없습니다.ASP.NET MVC - 세션 사용 대안

세션에 의존하지 않고 원하는 것을 달성하는 방법에 대한 제안 사항 (데이터베이스가없는 것이 좋음)은 무엇입니까?

답변

0

이것은 내가 생각해 낸 해결책입니다. 많은 테스트를 수행하지는 않았지만 현재 시나리오에서는 Session에 대한 대안으로 받아 들여질 수 있습니다. Global.asax의 Session_End/Session_Start를 사용하여 필요에 따라 행을 만들고 제거하는지 확인합니다.

public class UserTable : Dictionary<string, Dictionary<string, object>> 
{ 
    public new object this[string key] 
    { 
     get 
     { 
      object value = null; 
      if (HttpContext.Current != null) 
      { 
       var sessionId = HttpContext.Current.Session.SessionID; 
       if (ContainsKey(sessionId) && base[sessionId].ContainsKey(key)) 
        value = base[sessionId][key]; 
      } 
      else 
       throw new Exception("No HttpContext present."); 
      return value; 
     } 
     set 
     { 
      if (HttpContext.Current != null) 
      { 
       var sessionId = HttpContext.Current.Session.SessionID; 
       if (!ContainsKey(sessionId)) 
        Add(sessionId, new Dictionary<string, object>()); 
       if (!base[sessionId].ContainsKey(key)) 
        base[sessionId].Add(key, value); 
       else 
        base[sessionId][key] = value; 
      } 
      else 
       throw new Exception("No HttpContext present."); 
     } 
    } 

    public object this[string sessionId, string key] 
    { 
     get 
     { 
      object value = null; 
      if (ContainsKey(sessionId) && base[sessionId].ContainsKey(key)) 
       value = base[sessionId][key]; 
      return value; 
     } 
     set 
     { 
      if (!ContainsKey(sessionId)) 
       Add(sessionId, new Dictionary<string, object>()); 
      if (!base[sessionId].ContainsKey(key)) 
       base[sessionId].Add(key, value); 
      else 
       base[sessionId][key] = value; 
     } 
    } 

    public void Add(string sessionId) 
    { 
     Add(sessionId, new Dictionary<string, object>()); 
    } 

    public void Add() 
    { 
     if (HttpContext.Current != null) 
      Add(HttpContext.Current.Session.SessionID); 
     else 
      throw new Exception("No HttpContext present."); 
    } 

    public new void Remove(string sessionId) 
    { 
     base.Remove(sessionId); 
    } 

    public void Remove() 
    { 
     if (HttpContext.Current != null) 
      Remove(HttpContext.Current.Session.SessionID); 
     else 
      throw new Exception("No HttpContext present."); 
    } 
} 
2

Uploadify는 전적으로 프론트 엔드 스크립트이므로 ASP.NET에서 세션을 가져 오는 이유를 알지 못합니다. 나는 또한 당신의 특별한 문제가 무엇인지 완전히 이해하지 못합니다.

일단 파일이 업로드되면 사용자가 화면에서 파일을 볼 수 없다는 문제가 있다면 Uploadify와 독립적 인 파일 목록을 표시하는 방법을 알아내는 것이 좋습니다. 가능한 경우 파일과 함께 ID 토큰을 보낸 다음 데이터베이스에서 목록을 표시하는 데 필요한 데이터를 가져와야합니다.

+1

본질적으로 이것이 문제입니다. 나는 데이터베이스에 업로드를 캐싱하는 것을 고려했다. 그러나 그것은 트럭과 함께 손톱을 망치려고 노력하는 것 같다. –

0

아마도 키가 클라이언트의 IP 인 정적 해시 맵입니까? 값은 다른 세션에 저장하려는 개체가됩니다.

+0

그것은 실제로 나쁘지 않다. 감사합니다. –

+0

물론 커피 샵에서 사용자와 같은 시나리오에서 그렇게 열정적이지는 않습니다. 업로드 작업으로 세션 ID를 전달한 다음 세션 ID의 HashMap을 사용하면 제공되는 서비스를 명시 적으로 사용할 수 있습니다. 세션 ID. 주어진 Session ID에 대해 Session 객체를 가져올 수 있습니까? –

+0

다른 세션 ID는 새 세션이 존재 함을 나타내며, 이전 세션을 저장하지 않으면 이전 세션이 더 이상 사용 가능하지 않습니다 (현재 세션에없는 세션). 세션은 개체이며 해시에 저장할 수 있지만 해결 방법으로 해결할 문제보다 더 많은 문제가 발생할 것이라고 생각합니다. 하지만 커피 숍에서 말하는 것은 무엇입니까? 사용자가 IP 주소를 변경합니까? – Freddy

0

한 가지 확인해야 할 점 - 업로드하기 전에 데이터를 추가하여 세션을 "실시간"으로 설정 했습니까? ASP.NET은 세션에 데이터가있을 때까지 세션을 재생성합니다.

+0

예, 세션은 실제로 라이브입니다.이 문제는 저뿐만 아니라 SWFUpload와 관련이 있습니다. :) –

+0

Gotcha. http 디버거 (예 : Fiddler2)를 사용하여 전선에서 진행되는 작업을 확인합니다. 뭔가가 여기에 합쳐지지 않습니다. 적어도 내 멍청한 의미에 따르면. –