Getting cookie information
Domain user information
You can use the following function to extract the Domain User Information from the ID cookie:
/*
* Function to extract the Snowplow Domain User Information from the first-party cookie set by the Snowplow JavaScript Tracker
*
* @param string cookieName (optional) The value used for "cookieName" in the tracker constructor argmap
* (leave blank if you did not set a custom cookie name)
*
* @return string or bool The ID string if the cookie exists or false if the cookie has not been set yet
*/
function getSnowplowDuid(cookieName) {
var cookieName = cookieName || '_sp_';
var matcher = new RegExp(cookieName + 'id\\.[a-f0-9]+=([^;]+);?');
var match = document.cookie.match(matcher);
var split = match[1].split('.');
if (match && match[1]) {
return {
'domain_userid': split[0],
'domain_sessionidx': split[2],
'domain_sessionid': split[5]
}
} else {
return false;
}
}
If you set a custom cookieName
field in the argmap, pass that name into the function; otherwise call the function without arguments. Note that if the function is called before the cookie exists (i.e. when the user is visiting the page for the first time and sp.js has not yet loaded) if will return false
.
Retrieving cookie properties from the tracker
It's possible to retrieve cookie properties for use in your code (as well as the page view UUID and user ID) using a tracker callback. This is an advanced usage of the tracker.
- JavaScript (tag)
- Browser (npm)
If you call snowplow
with a function as the argument, the function will be executed when sp.js loads:
snowplow(function () {
console.log("sp.js has loaded");
});
Or equivalently:
snowplow(function (x) {
console.log(x);
}, "sp.js has loaded");
The callback you provide is executed as a method on the internal trackerDictionary
object. This means that you can access the trackerDictionary
using this
.
// Configure a tracker instance named "sp"
snowplow('newTracker', 'sp', '{{COLLECTOR_URL}', {
appId: 'snowplowExampleApp'
});
// Access the tracker instance inside a callback
snowplow(function () {
var sp = this.sp;
var domainUserId = sp.getDomainUserId();
console.log(domainUserId);
})
The callback function should not be a method:
// TypeError: Illegal invocation
snowplow(console.log, "sp.js has loaded");
This will not work because the value of this
in the console.log
function will be the trackerDictionary
rather than console
.
You can get around this problem using Function.prototoype.bind
as follows:
snowplow(console.log.bind(console), "sp.js has loaded");
For more on execution context in JavaScript, see the MDN page.
When initialising a tracker, you can use the returned tracker
instance to access various properties from this tracker instance.
// Configure a tracker instance named "sp"
const sp = newTracker('sp', '{{COLLECTOR_URL}', {
appId: 'snowplowExampleApp'
});
// Access the tracker properties
const domainUserId = sp.getDomainUserId();
getDomainUserId
The getDomainUserId
method returns the user ID stored in the first-party cookie:
- JavaScript (tag)
- Browser (npm)
// Access the tracker instance inside a callback
snowplow(function () {
var sp = this.sp;
var domainUserId = sp.getDomainUserId();
console.log(domainUserId);
})
const domainUserId = sp.getDomainUserId();
console.log(domainUserId);
getDomainUserInfo
The getDomainUserInfo
method returns all the information stored in first-party cookie in an array:
- JavaScript (tag)
- Browser (npm)
// Access the tracker instance inside a callback
snowplow(function () {
var sp = this.sp;
var domainUserInfo = sp.getDomainUserInfo();
console.log(domainUserInfo);
})
const domainUserInfo = sp.getDomainUserInfo();
console.log(domainUserInfo);
The domainUserInfo
variable will contain an array with 11 elements:
- A string set to
'1'
if this is the user's first session and'0'
otherwise - The domain user ID
- The timestamp at which the cookie was created
- The number of times the user has visited the site
- The timestamp for the current visit
- The timestamp of the last visit
- The session id
- ID of the previous session (since version 3.5)
- ID of the first event in the current session (since version 3.5)
- Device created timestamp of the first event in the current session (since version 3.5)
- Index of the last event in the session (used to inspect order of events) (since version 3.5)
getCookieName
The getCookieName
method returns the complete cookie name for the domain or session cookie:
- JavaScript (tag)
- Browser (npm)
// Access the tracker instance inside a callback
snowplow(function () {
var sp = this.sp;
var cookieName = sp.getCookieName('id');
console.log(cookieName);
})
const cookieName = sp.getCookieName('id');
console.log(cookieName);
The argument corresponds to the basename of the cookie: 'id' for the domain cookie, 'ses' for the session cookie.