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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|