ln.http/session/SessionCache.cs

73 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
namespace ln.http.resources.session
{
public class SessionCache
{
Dictionary<Guid, Session> sessions = new Dictionary<Guid, Session>();
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 ApplySession(HttpRequest httpRequest)
{
Guid sessionID = FindSessionID(httpRequest);
if (!Guid.Empty.Equals(sessionID) && Contains(sessionID))
{
Session session = this.sessions[sessionID];
session.Touch();
return session;
}
else
{
Session session = CreateSession();
this.sessions.Add(session.SessionID, session);
return session;
}
}
}
}