Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

2 лет назад
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. module.exports = function(session) {
  2. const Store = session.Store
  3. const defer = (cb, ...args) => {
  4. if (typeof cb != 'function') return
  5. setImmediate(cb, ...args)
  6. }
  7. class ExtendedMap extends Map {
  8. set(key, value, maxAge) {
  9. const cached = super.get(key)
  10. if (cached && cached.timer) clearTimeout(cached.timer)
  11. const timer = maxAge ? setTimeout(super.delete.bind(this, key), maxAge) : null
  12. return super.set(key, {timer, value})
  13. }
  14. get(key) {
  15. const cached = super.get(key)
  16. return cached && cached.value
  17. }
  18. delete(key) {
  19. const cached = super.get(key)
  20. if (cached && cached.timer) clearTimeout(cached.timer)
  21. return super.delete(key)
  22. }
  23. }
  24. class MemoryStore extends Store {
  25. constructor(options = {}) {
  26. super(options)
  27. this.sessions = new ExtendedMap()
  28. this.ttl = options.ttl
  29. }
  30. get(sid, callback) {
  31. let session = this.sessions.get(sid)
  32. defer(callback, null, session)
  33. }
  34. set(sid, session, callback) {
  35. let ttl = this._getTTL(session)
  36. if (ttl > 0) {
  37. this.sessions.set(sid, session, ttl)
  38. } else {
  39. this.sessions.delete(sid)
  40. }
  41. defer(callback, null)
  42. }
  43. touch(sid, session, callback) {
  44. let ttl = this._getTTL(session)
  45. let stored = this.sessions.get(sid)
  46. stored.cookie = session.cookie
  47. this.sessions.set(sid, stored, ttl)
  48. defer(callback, null)
  49. }
  50. destroy(sid, callback) {
  51. this.sessions.delete(sid)
  52. defer(callback, null)
  53. }
  54. clear(callback) {
  55. this.sessions.clear()
  56. defer(callback, null)
  57. }
  58. length(callback) {
  59. let len = this.sessions.size
  60. defer(callback, null, len)
  61. }
  62. ids(callback) {
  63. let keys = Array.from(this.sessions.keys())
  64. defer(callback, null, keys)
  65. }
  66. all(callback) {
  67. let sessions = Array.from(this.sessions.values())
  68. defer(callback, null, sessions)
  69. }
  70. _getTTL(session) {
  71. if (typeof this.ttl == 'number') return this.ttl
  72. let maxAge = (session && session.cookie) ? session.cookie.maxAge : null
  73. return (typeof maxAge == 'number') ? maxAge : 86400000
  74. }
  75. }
  76. return MemoryStore
  77. }