using System; using System.Collections.Generic; namespace ln.http.session { public class SessionCache { Dictionary sessions = new Dictionary(); public SessionCache() { } public bool Contains(Guid sessionID) { return this.sessions.ContainsKey(sessionID); } /* * Create a new Session instance * */ public virtual Session CreateSession() { return new Session(); } /* * Find and return SessionID from given HttpRequest * */ public virtual Guid FindSessionID(HttpRequest httpRequest) { if (httpRequest.ContainsCookie("SID_LN")) { return Guid.Parse(httpRequest.GetCookie("SID_LN")); } return Guid.Empty; } /* * Apply SessionID of the given Session to the given Response * */ public virtual void ApplySessionID(HttpResponse httpResponse,Session session) { HttpCookie sessionCookie = new HttpCookie("SID_LN",session.SessionID.ToString()); sessionCookie.Path = "/"; httpResponse.AddCookie(sessionCookie); } public Session GetSession(HttpRequest httpRequest) { Guid sessionID = FindSessionID(httpRequest); if (!Guid.Empty.Equals(sessionID) && Contains(sessionID)) { lock (sessions) { Session session = this.sessions[sessionID]; session.Touch(); return session; } } else { Session session = CreateSession(); lock (this.sessions) { this.sessions.Add(session.SessionID, session); } return session; } } } }