75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
using System;
|
|
using System.Runtime.Caching;
|
|
using Kreta.Core;
|
|
using Kreta.Framework;
|
|
using Kreta.Web.Security;
|
|
|
|
namespace Kreta.Web.Controllers.Logic
|
|
{
|
|
public class SessionHandler
|
|
{
|
|
private static readonly CacheItemPolicy DefaultCacheItemPolicy = new CacheItemPolicy { SlidingExpiration = TimeSpan.FromMinutes(60) };
|
|
|
|
private static int sessionTimeOut = 0;
|
|
|
|
private static string GetCacheKey(string sessionId)
|
|
{
|
|
return $"{nameof(SessionHandler)}_{sessionId}";
|
|
}
|
|
|
|
public static int SessionTimeOut
|
|
{
|
|
get
|
|
{
|
|
if (sessionTimeOut < 1)
|
|
{
|
|
sessionTimeOut = (SDAServer.Instance.Configuration.SessionTimeout - 1) * 60; // A kérés és válasz alatt a mi számlálónk elcsúszik pár másodperccel és a valódi session hamarabb járna le.
|
|
if (sessionTimeOut < 45)
|
|
{
|
|
sessionTimeOut = 45;
|
|
}
|
|
}
|
|
|
|
return sessionTimeOut;
|
|
}
|
|
}
|
|
|
|
public static void UpdateSessionTime()
|
|
{
|
|
string sessionId = ClaimData.SessionId;
|
|
if (string.IsNullOrWhiteSpace(sessionId))
|
|
{
|
|
throw new Exception("Invalid Session key");
|
|
}
|
|
|
|
Cache.Set(GetCacheKey(sessionId), DateTime.Now, DefaultCacheItemPolicy);
|
|
}
|
|
|
|
public static int GetRemainingTime()
|
|
{
|
|
string sessionId = ClaimData.SessionId;
|
|
if (string.IsNullOrWhiteSpace(sessionId))
|
|
{
|
|
throw new Exception("Invalid Session key");
|
|
}
|
|
|
|
DateTime lastCallTime = Cache.AddOrGetExisting(GetCacheKey(sessionId), DateTime.Now, DefaultCacheItemPolicy);
|
|
TimeSpan spendTime = DateTime.Now - lastCallTime;
|
|
int remainingTime = SessionTimeOut - (spendTime.Minutes * 60 + spendTime.Seconds);
|
|
|
|
PingKretaServerSession(sessionId);
|
|
|
|
return remainingTime;
|
|
}
|
|
|
|
public static void DropSession(string sessionId)
|
|
{
|
|
Cache.Remove(GetCacheKey(sessionId));
|
|
}
|
|
|
|
private static void PingKretaServerSession(string sessionId)
|
|
{
|
|
SDAServer.Instance.SessionManager.PingSession(sessionId);
|
|
}
|
|
}
|
|
}
|