How long can a given session exist? If no session will last more than X period of time, and you know that you will never have more than N sessions present in the table at any given time, and you know the maxiumum rate at which new sessions will be added, then you could implement some form of circular queue system, cycling over a maximum set of numbers.
For example, if you never have more than 1000 rows in the table at any given point in time, no more than 1000 rows will be added in any given 5 minute period, and no row will persist for more than 2 days (nightly clean-up routine?), then you would go through 1000 * 2 * 24 * 12 = 576,000 Ids every two days... where every id gets added, used, and removed from the system every two days. Build circular queue logic around a large safety factor of that number (5,000,000, maybe), and you could be covered.
The hard part, of course, is generating the Id. I've done that in the past with a one-row "NextId" table which was defined and called like so:
-- Create table
CREATE TABLE NextId
(NextId int not null)
-- Add the one row to the table
INSERT Nextid (Nextid) values (1)
Optionally, put an INSERT/DELETE trigger on here to prevent the addition or deletion of rows
This procedure would be used to get the NextId to use. The single transaction is of course atomic, so you don't have to worry about locking. I used 10 for testing purposes. You will end up with an Id value of 0 every now and then, but it's a surrogate key so the actual value used should not matter.
CREATE PROCEDURE GetNextId
@NextId int OUTPUT
AS
SET NOCOUNT on
UPDATE NextId
set
@NextId = NextId
,NextId = (NextId + 1) % 10 -- 5000000
RETURN
Here's how the procedure would be called:
DECLARE @NextId int
EXECUTE GetNextId @NextId output
PRINT @NextId
I don't know how well this would work in excessively high-volume situations, but it does work well under fair-size workloads.