code: public static StorageKeyFormat of(final String config, final String host, final String context, final String webappVersion) {
  		if(config == null || config.trim().isEmpty())
  			return EMPTY;
  
  		final String[] tokens = config.split(",");
  
  		final StringBuilder sb = new StringBuilder();
  		for (int i = 0; i < tokens.length; i++) {
  			final String value = PrefixTokenFactory.parse(tokens[i], host, context, webappVersion);
  			if(value != null && !value.trim().isEmpty()) {
  	            if(sb.length() > 0)
  	                sb.append(STORAGE_TOKEN_SEP);
                  sb.append(value);
  			}
  		}
  		final String prefix = sb.length() == 0 ? null : sb.append(STORAGE_KEY_SEP).toString();
          return new StorageKeyFormat(prefix, config);
  	}
docs: Creates a new {@link StorageKeyFormat} for the given configuration.
  The configuration has the form <code>$token,$token</code>
  
  Some examples which config would create which output for the key / session id "foo" with context path "ctxt" and host "hst":
  <dl>
  <dt>static:x</dt><dd>x_foo</dd>
  <dt>host</dt><dd>hst_foo</dd>
  <dt>host.hash</dt><dd>e93c085e_foo</dd>
  <dt>context</dt><dd>ctxt_foo</dd>
  <dt>context.hash</dt><dd>45e6345f_foo</dd>
  <dt>host,context</dt><dd>hst:ctxt_foo</dd>
  <dt>webappVersion</dt><dd>001_foo</dd>
  <dt>host.hash,context.hash,webappVersion</dt><dd>e93c085e:45e6345f:001_foo</dd>
  </dl>