@@ -16,11 +16,9 @@ const FUTURE = 'Fri, 01 Jan 2100 00:00:00 GMT';
1616const LOCATION = 'Path=/; Domain' ;
1717const COOKIE_DELETE = `${ TOKEN } =deleted; Expires=${ EPOCH } ; ${ LOCATION } =` ;
1818const COOKIE_HOST = `Expires=${ FUTURE } ; ${ LOCATION } ` ;
19- const SANDBOX_POOL = 20 ;
2019
2120const sessions = new Map ( ) ;
2221const cache = new WeakMap ( ) ;
23- const pool = [ ] ;
2422
2523const generateToken = ( ) => {
2624 const base = ALPHA_DIGIT . length ;
@@ -46,45 +44,29 @@ const parseCookies = cookie => {
4644} ;
4745
4846module . exports = ( ) => {
49- let timer = null ;
5047 const { db } = application ;
5148
52- const fillPool = ( ) => {
53- const need = SANDBOX_POOL - pool . length ;
54- for ( let i = 0 ; i < need ; i ++ ) {
55- pool . push ( application . createSandbox ( ) ) ;
56- }
57- } ;
58-
59- const getSandbox = ( ) => {
60- if ( timer === null ) {
61- timer = setTimeout ( ( ) => {
62- fillPool ( ) ;
63- timer = null ;
64- } , 0 ) ;
65- }
66- if ( pool . length > 0 ) return pool . pop ( ) ;
67- return application . createSandbox ( ) ;
68- } ;
69-
7049 const save = ( token , context ) => {
7150 const data = JSON . stringify ( context ) ;
7251 db . update ( 'Session' , { data } , { token } ) ;
7352 } ;
7453
7554 class Session {
76- constructor ( token , sandbox , contextData = { token } ) {
55+ constructor ( token , contextData = { token } ) {
7756 const contextHandler = {
57+ get : ( data , key ) => {
58+ if ( key === 'token' ) return this . token ;
59+ return Reflect . get ( data , key ) ;
60+ } ,
7861 set : ( data , key , value ) => {
7962 const res = Reflect . set ( data , key , value ) ;
8063 save ( token , this . data ) ;
8164 return res ;
8265 }
8366 } ;
8467 this . token = token ;
85- this . sandbox = sandbox ;
8668 this . data = contextData ;
87- sandbox . context = new Proxy ( contextData , contextHandler ) ;
69+ this . context = new Proxy ( contextData , contextHandler ) ;
8870 }
8971 }
9072
@@ -93,8 +75,7 @@ module.exports = () => {
9375 const host = common . parseHost ( client . req . headers . host ) ;
9476 const ip = client . req . connection . remoteAddress ;
9577 const cookie = `${ TOKEN } =${ token } ; ${ COOKIE_HOST } =${ host } ; HttpOnly` ;
96- const sandbox = getSandbox ( ) ;
97- const session = new Session ( token , sandbox ) ;
78+ const session = new Session ( token ) ;
9879 sessions . set ( token , session ) ;
9980 cache . set ( client . req , session ) ;
10081 const data = JSON . stringify ( session . data ) ;
@@ -109,15 +90,14 @@ module.exports = () => {
10990 const { cookie } = client . req . headers ;
11091 if ( ! cookie ) return null ;
11192 const cookies = parseCookies ( cookie ) ;
112- const token = cookies . token ;
93+ const { token } = cookies ;
11394 if ( ! token ) return null ;
11495 let session = sessions . get ( token ) ;
11596 if ( ! session ) {
11697 const [ record ] = await db . select ( 'Session' , [ 'Data' ] , { token } ) ;
11798 if ( record && record . data ) {
11899 const data = JSON . parse ( record . data ) ;
119- const sandbox = getSandbox ( ) ;
120- session = new Session ( token , sandbox , data ) ;
100+ session = new Session ( token , data ) ;
121101 sessions . set ( token , session ) ;
122102 }
123103 }
@@ -141,5 +121,5 @@ module.exports = () => {
141121 . select ( 'SystemUser' , [ 'Id' , 'Password' ] , { login } )
142122 . then ( ( [ user ] ) => user ) ;
143123
144- return { fillPool , start, restore, remove, save, registerUser, getUser } ;
124+ return Object . freeze ( { start, restore, remove, save, registerUser, getUser } ) ;
145125} ;
0 commit comments