improve performance by reducing database calls in initial client request scenarios
This commit is contained in:
parent
02e86a940b
commit
e8425ba03a
@ -230,10 +230,10 @@ namespace Oqtane.Pages
|
|||||||
|
|
||||||
// filter
|
// filter
|
||||||
string filter = Constants.DefaultVisitorFilter;
|
string filter = Constants.DefaultVisitorFilter;
|
||||||
var setting = _settings.GetSetting(EntityNames.Site, SiteId, "VisitorFilter");
|
var settings = _settings.GetSettings(EntityNames.Site, SiteId);
|
||||||
if (setting != null)
|
if (settings.Any(item => item.SettingName == "VisitorFilter"))
|
||||||
{
|
{
|
||||||
filter = setting.SettingValue;
|
filter = settings.First(item => item.SettingName == "VisitorFilter").SettingValue;
|
||||||
}
|
}
|
||||||
foreach (string term in filter.ToLower().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(sValue => sValue.Trim()).ToArray())
|
foreach (string term in filter.ToLower().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(sValue => sValue.Trim()).ToArray())
|
||||||
{
|
{
|
||||||
@ -243,6 +243,7 @@ namespace Oqtane.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get other request attributes
|
||||||
string url = Request.GetEncodedUrl();
|
string url = Request.GetEncodedUrl();
|
||||||
string referrer = (Request.Headers[HeaderNames.Referer] != StringValues.Empty) ? Request.Headers[HeaderNames.Referer] : "";
|
string referrer = (Request.Headers[HeaderNames.Referer] != StringValues.Empty) ? Request.Headers[HeaderNames.Referer] : "";
|
||||||
int? userid = null;
|
int? userid = null;
|
||||||
@ -251,39 +252,34 @@ namespace Oqtane.Pages
|
|||||||
userid = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value);
|
userid = int.Parse(User.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if cookie already exists
|
||||||
|
Visitor visitor = null;
|
||||||
|
bool addcookie = false;
|
||||||
var VisitorCookie = "APP_VISITOR_" + SiteId.ToString();
|
var VisitorCookie = "APP_VISITOR_" + SiteId.ToString();
|
||||||
if (!int.TryParse(Request.Cookies[VisitorCookie], out VisitorId))
|
if (!int.TryParse(Request.Cookies[VisitorCookie], out VisitorId))
|
||||||
{
|
{
|
||||||
|
// if enabled use IP Address correlation
|
||||||
VisitorId = -1;
|
VisitorId = -1;
|
||||||
bool correlate = true;
|
bool correlate = true;
|
||||||
setting = _settings.GetSetting(EntityNames.Site, SiteId, "VisitorCorrelation");
|
if (settings.Any(item => item.SettingName == "VisitorCorrelation"))
|
||||||
if (setting != null)
|
|
||||||
{
|
{
|
||||||
correlate = bool.Parse(setting.SettingValue);
|
correlate = bool.Parse(settings.First(item => item.SettingName == "VisitorCorrelation").SettingValue);
|
||||||
}
|
}
|
||||||
if (correlate)
|
if (correlate)
|
||||||
{
|
{
|
||||||
var visitor = _visitors.GetVisitor(SiteId, RemoteIPAddress);
|
visitor = _visitors.GetVisitor(SiteId, RemoteIPAddress);
|
||||||
if (visitor != null)
|
if (visitor != null)
|
||||||
{
|
{
|
||||||
VisitorId = visitor.VisitorId;
|
VisitorId = visitor.VisitorId;
|
||||||
|
addcookie = true;
|
||||||
Response.Cookies.Append(
|
|
||||||
VisitorCookie,
|
|
||||||
VisitorId.ToString(),
|
|
||||||
new CookieOptions()
|
|
||||||
{
|
|
||||||
Expires = DateTimeOffset.UtcNow.AddYears(1),
|
|
||||||
IsEssential = true
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VisitorId == -1)
|
if (VisitorId == -1)
|
||||||
{
|
{
|
||||||
var visitor = new Visitor();
|
// create new visitor
|
||||||
|
visitor = new Visitor();
|
||||||
visitor.SiteId = SiteId;
|
visitor.SiteId = SiteId;
|
||||||
visitor.IPAddress = RemoteIPAddress;
|
visitor.IPAddress = RemoteIPAddress;
|
||||||
visitor.UserAgent = useragent;
|
visitor.UserAgent = useragent;
|
||||||
@ -295,22 +291,19 @@ namespace Oqtane.Pages
|
|||||||
visitor.CreatedOn = DateTime.UtcNow;
|
visitor.CreatedOn = DateTime.UtcNow;
|
||||||
visitor.VisitedOn = DateTime.UtcNow;
|
visitor.VisitedOn = DateTime.UtcNow;
|
||||||
visitor = _visitors.AddVisitor(visitor);
|
visitor = _visitors.AddVisitor(visitor);
|
||||||
|
VisitorId = visitor.VisitorId;
|
||||||
Response.Cookies.Append(
|
addcookie = true;
|
||||||
VisitorCookie,
|
|
||||||
visitor.VisitorId.ToString(),
|
|
||||||
new CookieOptions()
|
|
||||||
{
|
|
||||||
Expires = DateTimeOffset.UtcNow.AddYears(1),
|
|
||||||
IsEssential = true
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var visitor = _visitors.GetVisitor(VisitorId);
|
if (visitor == null)
|
||||||
|
{
|
||||||
|
// get visitor if it was not previously loaded
|
||||||
|
visitor = _visitors.GetVisitor(VisitorId);
|
||||||
|
}
|
||||||
if (visitor != null)
|
if (visitor != null)
|
||||||
{
|
{
|
||||||
|
// update visitor
|
||||||
visitor.IPAddress = RemoteIPAddress;
|
visitor.IPAddress = RemoteIPAddress;
|
||||||
visitor.UserAgent = useragent;
|
visitor.UserAgent = useragent;
|
||||||
visitor.Language = language;
|
visitor.Language = language;
|
||||||
@ -329,9 +322,24 @@ namespace Oqtane.Pages
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// remove cookie if VisitorId does not exist
|
||||||
Response.Cookies.Delete(VisitorCookie);
|
Response.Cookies.Delete(VisitorCookie);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// append cookie
|
||||||
|
if (addcookie)
|
||||||
|
{
|
||||||
|
Response.Cookies.Append(
|
||||||
|
VisitorCookie,
|
||||||
|
VisitorId.ToString(),
|
||||||
|
new CookieOptions()
|
||||||
|
{
|
||||||
|
Expires = DateTimeOffset.UtcNow.AddYears(1),
|
||||||
|
IsEssential = true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user