ASP와 ASP.NET의 세션 공유 ASP(Classic)
2009.04.19 10:39 EDIT
ASP와 ASP.NET의 세션 공유에는 여러가지 방법이 존재할 것이다. 그중에 하나는 세션 값이 DB를 경유하도록 하는 것인데, 다음 사이트에서 제시하는 소스가 비교적 간단한 것 같다.
ASP 101 - Sharing Session State between ASP and ASP.NET
원리는 간단하다. ASP에서 ASPX로 세션값을 넘긴다고 하면 :
1. ASP 페이지에서, GUID를 생성한다.
2. DB에 GUID를 키로 하여 세션의 모든 Key/Value를 집어넣는다.
3. ASPX 페이지로 이동하면서 생성한 GUID를 넘긴다.
4. ASPX 페이지에서, DB를 GUID로 조회하여 발견된 모든 Key/Value를 세션에 넣는다.
5. 재사용 불가능하도록 하기 위해 가져온 값들을 DB에서 모두 지운다.
반대의 경우도 마찬가지다.
그런데 위 주소에서 제공되는 소스에는 한가지 문제가 있다. ASP와 ASPX간에 서로 세션에 추가한 값은 잘 공유가 되는데, 삭제한 값은 반영되지 않고 남아있다. 이를테면 ASP 페이지에서 계정 정보를 삭제했는데 ASPX 페이지에서는 계속 로그인되어 있는 식이다. 기존의 세션 내용을 삭제하지 않고 유지하면서 새 값들을 덮어 씌우기만 하기 때문이다. 때문에 정상 동작하게 하려면 기존의 세션을 모두 지워줘야 한다. 정확히는 GetSessionFromDatabase() 메서드가 실행되기 전에 Session.Clear() 메서드를 호출해주면 된다.
세션 공유의 핵심은 로그인 공유인데, 내 생각에 이것은 ASP.NET에서 폼인증(Forms Authentication)을 쓰고 ASP에서 ServerVariables 컬렉션을 이용해 여기에 의존하는 것이 가장 좋은 방법이다.
세부 내용은 다음 링크 참고.
http://weblogs.asp.net/scottgu/archive/2007/03/04/tip-trick-integrating-asp-net-security-with-classic-asp-and-non-asp-net-urls.aspx