HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Example: Create visitor group criteria

Shows how to develop a criteria for categorizing visitors according to whether a specific cookie exists in the session.

(Thanks to Ted & Gustaf for this example.)

One usage scenario could be to check for a cookie that says that the visitor has previously completed a purchase on the website; that is, is a returning customer.

Create the settings and criterion classes

All visitor group criteria require a settings class and a criterion class.

  • The settings class is used to persist any settings available to editors when creating new visitor groups.
  • The criterion class contains the logic to determine whether or not a visitor belongs to the visitor group.

You should create the two classes in a suitable folder structure:

Implement the settings class

The only setting required for this visitor group criterion is the cookie name you should look for.

  1. First, make the CookieExistsCriterionSettings class inherit the CriterionModelBase class:

    public class CookieExistsCriterionSettings : CriterionModelBase
    
  2. Add a public property to let editors specify the cookie name:

    [Required]
    public string CookieName { get; set; }
    
  3. If you need custom validation logic when a criterion is saved, you can make your settings class implement the IValidateCriterionModel interface (this is optional). By implementing that interface’s Validate method, you can customize how settings are validated before saving a criterion for a visitor group.

    The abstract CriterionModelBase class requires you to implement the Copy() method. Because you are not using complex reference types, you can implement it by returning a shallow copy as shown (see Create custom visitor group criteria):

public override ICriterionModel Copy()
        {
           return ShallowCopy();
        }

This is the complete CookieExistsCriterionSettings class:

public class CookieExistsCriterionSettings : CriterionModelBase
    {
        [Required]
        public string CookieName { get; set; }
    
        public override ICriterionModel Copy()
        {        
             return ShallowCopy();
        }
    }

Implement the criterion class

  1. Make the CookieExistsCriterionclass inherit the abstract CriterionBaseclass with the settings class as the type parameter:

    public class CookieExistsCriterion : CriterionBase<CookieExistsCriterionSettings>
    
  2. Add a VisitorGroupCriterion attribute to set the category, name, and description of our criterion (for more available VisitorGroupCriterion properties, see Create custom visitor group criteria:

[VisitorGroupCriterion(   
           Category = "Technical",
           DisplayName = "Cookie Exists",
           Description = "Checks if a specific cookie exists")]
  1. The abstract CriterionBase class requires you to implement an IsMatch() method which determines whether the current user matches this visitor group criterion. You should check if a specific cookie exists based on the criterion settings:
public override bool IsMatch(IPrincipal principal, HttpContextBase httpContext)
        { 
            return httpContext.Request.Cookies[Model.CookieName] != null;
        }

The criterion class appears as follows:

[VisitorGroupCriterion(   
       Category = "Technical",
       DisplayName = "Cookie Exists",
       Description = "Checks if a specific cookie exists")]
    
    public class CookieExistsCriterion : CriterionBase<CookieExistsCriterionSettings>
    {
        public override bool IsMatch(IPrincipal principal, HttpContextBase httpContext)
        { 
           return httpContext.Request.Cookies[Model.CookieName] != null;
        }
    }

📘

Note

You access the criterion settings instance through the Modelproperty.

Test the new criterion

To test the criterion, create a new visitor group using the new cookie criterion.

  1. Set the cookie name to .EPiServerLogin, the name of the cookie created when a user logs in:
1233

If you are on CMS version 10 or 11, it will look like this:

451
  1. Select some content in the editor that should only be displayed to users currently logged in to Episerver.
1127
  1. Click Personalized Content and select the new Episerver User visitor group.
268

This content is now only displayed to users logged into Episerver:

After publishing the page, you see this:

However, if you log out, you no longer see the personalized content.