@@ -133,7 +133,7 @@ local defaults = {
133
133
defaults .secret = var .session_secret or random (32 , true ) or random (32 )
134
134
135
135
local session = {
136
- _VERSION = " 2.12 "
136
+ _VERSION = " 2.13 "
137
137
}
138
138
139
139
session .__index = session
@@ -241,26 +241,25 @@ function session.open(opts)
241
241
addr ,
242
242
scheme
243
243
}
244
+ self .opened = true
244
245
local cookie = var [" cookie_" .. self .name ]
245
246
if cookie then
246
247
local i , e , d , h = self .storage :open (cookie , self .cookie .lifetime )
247
248
if i and e and e > time () and d and h then
248
- self .id = i
249
- self .expires = e
250
- local k = hmac (self .secret , self .id .. e )
249
+ local k = hmac (self .secret , i .. e )
251
250
d = self .cipher :decrypt (d , k , i , self .key )
252
251
if d and hmac (k , concat { i , e , d , self .key }) == h then
253
- self .data = self .serializer .deserialize (d )
252
+ d = self .serializer .deserialize (d )
253
+ self .id = i
254
+ self .expires = e
255
+ self .data = type (d ) == " table" and d or {}
254
256
self .present = true
257
+ return self , true
255
258
end
256
259
end
257
260
end
258
- if not self .present then
259
- regenerate (self )
260
- end
261
- if type (self .data ) ~= " table" then self .data = {} end
262
- self .opened = true
263
- return self , self .present
261
+ regenerate (self , true )
262
+ return self , false
264
263
end
265
264
266
265
function session .start (opts )
@@ -273,7 +272,9 @@ function session.start(opts)
273
272
local ok , err = self .storage :start (self .id )
274
273
if not ok then return nil , err end
275
274
end
276
- if self .expires - time () < self .cookie .renew then
275
+ local now = time ()
276
+ if self .expires - now < self .cookie .renew or
277
+ self .expires > now + self .cookie .lifetime then
277
278
local ok , err = save (self )
278
279
if not ok then return nil , err end
279
280
end
0 commit comments