mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-04-05 21:01:35 +08:00
Modified the OutputCache Module based on the enhancement proposed in Issue 5811,
by adding a VaryByRequestCookies property to the CacheSettingsPart to enable the generation of the Cache Key based on cookies
This commit is contained in:
parent
bd222908d6
commit
c9e14f9b82
@ -89,6 +89,7 @@ namespace Orchard.OutputCache.Controllers {
|
||||
DefaultMaxAge = settings.DefaultMaxAge,
|
||||
VaryByQueryStringParameters = settings.VaryByQueryStringParameters,
|
||||
VaryByRequestHeaders = settings.VaryByRequestHeaders,
|
||||
VaryByRequestCookies = settings.VaryByRequestCookies,
|
||||
IgnoredUrls = settings.IgnoredUrls,
|
||||
IgnoreNoCache = settings.IgnoreNoCache,
|
||||
VaryByCulture = settings.VaryByCulture,
|
||||
@ -116,6 +117,7 @@ namespace Orchard.OutputCache.Controllers {
|
||||
settings.DefaultMaxAge = model.DefaultMaxAge;
|
||||
settings.VaryByQueryStringParameters = model.VaryByQueryStringParameters;
|
||||
settings.VaryByRequestHeaders = model.VaryByRequestHeaders;
|
||||
settings.VaryByRequestCookies = model.VaryByRequestCookies;
|
||||
settings.IgnoredUrls = model.IgnoredUrls;
|
||||
settings.IgnoreNoCache = model.IgnoreNoCache;
|
||||
settings.VaryByCulture = model.VaryByCulture;
|
||||
|
@ -397,6 +397,12 @@ namespace Orchard.OutputCache.Filters {
|
||||
result["HEADER:" + varyByRequestHeader] = requestHeaders[varyByRequestHeader];
|
||||
}
|
||||
|
||||
// Vary by configured cookies.
|
||||
var requestCookies = filterContext.RequestContext.HttpContext.Request.Cookies;
|
||||
foreach (var varyByRequestCookies in CacheSettings.VaryByRequestCookies) {
|
||||
if (requestCookies[varyByRequestCookies] != null)
|
||||
result["COOKIE:" + varyByRequestCookies] = requestCookies[varyByRequestCookies].Value;
|
||||
}
|
||||
|
||||
// Vary by request culture if configured.
|
||||
if (CacheSettings.VaryByCulture) {
|
||||
|
@ -14,6 +14,7 @@ namespace Orchard.OutputCache.Models {
|
||||
VaryByQueryStringParameters = String.IsNullOrWhiteSpace(part.VaryByQueryStringParameters) ? null : part.VaryByQueryStringParameters.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();
|
||||
VaryByRequestHeaders = String.IsNullOrWhiteSpace(part.VaryByRequestHeaders) ? new HashSet<string>() : new HashSet<string>(part.VaryByRequestHeaders.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray());
|
||||
VaryByRequestHeaders.Add("HOST"); // Always vary by host name/tenant.
|
||||
VaryByRequestCookies = String.IsNullOrWhiteSpace(part.VaryByRequestCookies) ? new HashSet<string>() : new HashSet<string>(part.VaryByRequestCookies.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray());
|
||||
IgnoredUrls = String.IsNullOrWhiteSpace(part.IgnoredUrls) ? null : part.IgnoredUrls.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToArray();
|
||||
IgnoreNoCache = part.IgnoreNoCache;
|
||||
VaryByCulture = part.VaryByCulture;
|
||||
@ -27,6 +28,7 @@ namespace Orchard.OutputCache.Models {
|
||||
public int DefaultMaxAge { get; private set; }
|
||||
public IEnumerable<string> VaryByQueryStringParameters { get; private set; }
|
||||
public ISet<string> VaryByRequestHeaders { get; private set; }
|
||||
public ISet<string> VaryByRequestCookies { get; private set; }
|
||||
public IEnumerable<string> IgnoredUrls { get; private set; }
|
||||
public bool IgnoreNoCache { get; private set; }
|
||||
public bool VaryByCulture { get; private set; }
|
||||
|
@ -44,6 +44,11 @@ namespace Orchard.OutputCache.Models {
|
||||
}
|
||||
}
|
||||
|
||||
public string VaryByRequestCookies {
|
||||
get { return this.Retrieve(x => x.VaryByRequestCookies); }
|
||||
set { this.Store(x => x.VaryByRequestCookies, value); }
|
||||
}
|
||||
|
||||
public string IgnoredUrls {
|
||||
get { return this.Retrieve(x => x.IgnoredUrls); }
|
||||
set { this.Store(x => x.IgnoredUrls, value); }
|
||||
|
@ -11,6 +11,7 @@ namespace Orchard.OutputCache.ViewModels {
|
||||
[Range(0, Int32.MaxValue), Required] public int DefaultMaxAge { get; set; }
|
||||
public string VaryByQueryStringParameters { get; set; }
|
||||
public string VaryByRequestHeaders { get; set; }
|
||||
public string VaryByRequestCookies { get; set; }
|
||||
public string IgnoredUrls { get; set; }
|
||||
public bool IgnoreNoCache { get; set; }
|
||||
public bool VaryByCulture { get; set; }
|
||||
|
@ -43,7 +43,13 @@
|
||||
@Html.TextBoxFor(m => m.VaryByRequestHeaders, new { @class = "text medium" })
|
||||
<span class="hint">@T("When defined, using comma separated values, sets caching to vary by the specified request headers.")</span>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset>
|
||||
<label>@T("Vary Cookie String Parameters")</label>
|
||||
@Html.TextBoxFor(m => m.VaryByRequestCookies, new { @class = "text medium" })
|
||||
<span class="hint">@T("When defined, using comma separated values, sets caching to vary via specified cookie string parameters")</span>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<label>@T("Ignored URLs")</label>
|
||||
@Html.TextAreaFor(m => m.IgnoredUrls, new { @class = "text medium" })
|
||||
|
Loading…
Reference in New Issue
Block a user