ln.http/session/SessionCache.cs

76 lines
2.0 KiB
C#
Raw Normal View History

2019-02-26 22:00:37 +01:00
using System;
using System.Collections.Generic;
2019-11-15 13:47:01 +01:00
namespace ln.http.session
2019-02-26 22:00:37 +01:00
{
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);
}
2019-11-15 13:47:01 +01:00
public Session GetSession(HttpRequest httpRequest)
2019-02-26 22:00:37 +01:00
{
Guid sessionID = FindSessionID(httpRequest);
if (!Guid.Empty.Equals(sessionID) && Contains(sessionID))
{
2019-03-21 07:43:26 +01:00
lock (sessions)
{
Session session = this.sessions[sessionID];
session.Touch();
return session;
}
2019-02-26 22:00:37 +01:00
}
else
{
Session session = CreateSession();
2019-03-21 07:43:26 +01:00
lock (this.sessions)
{
this.sessions.Add(session.SessionID, session);
}
2019-02-26 22:00:37 +01:00
return session;
}
}
}
}