public override void RemoveItem(HttpContext context, string id, object lockId, SessionStateStoreData item) { var key = GetSessionIdKey(id); using (var client = GetClient()) using (var distributedLock = GetDistributedLock(client, key)) { if (distributedLock.LockState == DistributedLock.LOCK_NOT_ACQUIRED) { options.OnDistributedLockNotAcquired(id); return; } var stateRaw = client.GetAllEntriesFromHashRaw(key); UseTransaction(client, transaction => { RedisSessionState state; if (RedisSessionState.TryParse(stateRaw, out state) && state.Locked && state.LockId == (int)lockId) { transaction.QueueCommand(c => c.Remove(key)); } }); } }