Skip to content

Commit 86f5b46

Browse files
committed
Fix bug where session ids weren't stored when a session timed out.
1 parent aefe165 commit 86f5b46

File tree

4 files changed

+40
-17
lines changed

4 files changed

+40
-17
lines changed

amplitude.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -324,15 +324,13 @@ Amplitude.prototype.logEvent = function(eventType, eventProperties) {
324324
try {
325325
var eventTime = new Date().getTime();
326326
var eventId = this.nextEventId();
327-
var sessionId = this._sessionId;
328-
var lastEventTime = this._lastEventTime;
329327
var ua = this._ua;
330-
if (!sessionId || !lastEventTime || eventTime - lastEventTime > this.options.sessionTimeout) {
331-
sessionId = eventTime;
332-
localStorage.setItem(LocalStorageKeys.SESSION_ID, sessionId);
328+
if (!this._sessionId || !this._lastEventTime || eventTime - this._lastEventTime > this.options.sessionTimeout) {
329+
this._sessionId = eventTime;
330+
localStorage.setItem(LocalStorageKeys.SESSION_ID, this._sessionId);
333331
}
334-
lastEventTime = eventTime;
335-
localStorage.setItem(LocalStorageKeys.LAST_EVENT_TIME, lastEventTime);
332+
this._lastEventTime = eventTime;
333+
localStorage.setItem(LocalStorageKeys.LAST_EVENT_TIME, this._lastEventTime);
336334
localStorage.setItem(LocalStorageKeys.LAST_EVENT_ID, eventId);
337335

338336
eventProperties = eventProperties || {};
@@ -341,7 +339,7 @@ Amplitude.prototype.logEvent = function(eventType, eventProperties) {
341339
user_id: this.options.userId || this.options.deviceId,
342340
timestamp: eventTime,
343341
event_id: eventId,
344-
session_id: sessionId || -1,
342+
session_id: this._sessionId || -1,
345343
event_type: eventType,
346344
version_name: this.options.versionName || null,
347345
platform: this.options.platform,

amplitude.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/amplitude.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,15 +214,13 @@ Amplitude.prototype.logEvent = function(eventType, eventProperties) {
214214
try {
215215
var eventTime = new Date().getTime();
216216
var eventId = this.nextEventId();
217-
var sessionId = this._sessionId;
218-
var lastEventTime = this._lastEventTime;
219217
var ua = this._ua;
220-
if (!sessionId || !lastEventTime || eventTime - lastEventTime > this.options.sessionTimeout) {
221-
sessionId = eventTime;
222-
localStorage.setItem(LocalStorageKeys.SESSION_ID, sessionId);
218+
if (!this._sessionId || !this._lastEventTime || eventTime - this._lastEventTime > this.options.sessionTimeout) {
219+
this._sessionId = eventTime;
220+
localStorage.setItem(LocalStorageKeys.SESSION_ID, this._sessionId);
223221
}
224-
lastEventTime = eventTime;
225-
localStorage.setItem(LocalStorageKeys.LAST_EVENT_TIME, lastEventTime);
222+
this._lastEventTime = eventTime;
223+
localStorage.setItem(LocalStorageKeys.LAST_EVENT_TIME, this._lastEventTime);
226224
localStorage.setItem(LocalStorageKeys.LAST_EVENT_ID, eventId);
227225

228226
eventProperties = eventProperties || {};
@@ -231,7 +229,7 @@ Amplitude.prototype.logEvent = function(eventType, eventProperties) {
231229
user_id: this.options.userId || this.options.deviceId,
232230
timestamp: eventTime,
233231
event_id: eventId,
234-
session_id: sessionId || -1,
232+
session_id: this._sessionId || -1,
235233
event_type: eventType,
236234
version_name: this.options.versionName || null,
237235
platform: this.options.platform,

test/amplitude.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,31 @@ describe('Amplitude', function() {
167167
assert.deepEqual(events[0].event_properties, {prop: true});
168168
});
169169
});
170+
171+
describe('sessionId', function() {
172+
173+
var clock;
174+
175+
beforeEach(function() {
176+
clock = sinon.useFakeTimers();
177+
amplitude.init(apiKey);
178+
});
179+
180+
afterEach(function() {
181+
reset();
182+
clock.restore();
183+
});
184+
185+
it('should create new session IDs on timeout', function() {
186+
var sessionId = amplitude._sessionId;
187+
clock.tick(30 * 60 * 1000 + 1);
188+
amplitude.logEvent('Event Type 1');
189+
assert.lengthOf(server.requests, 1);
190+
var events = JSON.parse(querystring.parse(server.requests[0].requestBody).e);
191+
assert.equal(events.length, 1);
192+
assert.notEqual(events[0].session_id, sessionId);
193+
assert.notEqual(amplitude._sessionId, sessionId);
194+
assert.equal(events[0].session_id, amplitude._sessionId);
195+
});
196+
});
170197
});

0 commit comments

Comments
 (0)