init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
75
KretaWeb/Controllers/Logic/SessionHandler.cs
Normal file
75
KretaWeb/Controllers/Logic/SessionHandler.cs
Normal file
|
@ -0,0 +1,75 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue