In most scenarios, the common Storage implementations provided by the built-in gsession component are sufficient to meet requirements. If there are special scenarios that require the customization of Storage, it is certainly supported, as the functionality of gsession is designed with interfaces in mind.

Storage Definition

https://github.com/gogf/gf/v2/blob/master/os/gsession/gsession_storage.go

  1. // Storage is the interface definition for session storage.
  2. type Storage interface {
  3. // New creates a custom session id.
  4. // This function can be used for custom session creation.
  5. New(ctx context.Context, ttl time.Duration) (id string, err error)
  6. // Get retrieves and returns session value with given key.
  7. // It returns nil if the key does not exist in the session.
  8. Get(ctx context.Context, id string, key string) (value interface{}, err error)
  9. // GetMap retrieves all key-value pairs as map from storage.
  10. GetMap(ctx context.Context, id string) (data map[string]interface{}, err error)
  11. // GetSize retrieves and returns the size of key-value pairs from storage.
  12. GetSize(ctx context.Context, id string) (size int, err error)
  13. // Set sets one key-value session pair to the storage.
  14. // The parameter `ttl` specifies the TTL for the session id.
  15. Set(ctx context.Context, id string, key string, value interface{}, ttl time.Duration) error
  16. // SetMap batch sets key-value session pairs as map to the storage.
  17. // The parameter `ttl` specifies the TTL for the session id.
  18. SetMap(ctx context.Context, id string, data map[string]interface{}, ttl time.Duration) error
  19. // Remove deletes key with its value from storage.
  20. Remove(ctx context.Context, id string, key string) error
  21. // RemoveAll deletes all key-value pairs from storage.
  22. RemoveAll(ctx context.Context, id string) error
  23. // GetSession returns the session data as `*gmap.StrAnyMap` for given session id from storage.
  24. //
  25. // The parameter `ttl` specifies the TTL for this session.
  26. // The parameter `data` is the current old session data stored in memory,
  27. // and for some storage it might be nil if memory storage is disabled.
  28. //
  29. // This function is called ever when session starts. It returns nil if the TTL is exceeded.
  30. GetSession(ctx context.Context, id string, ttl time.Duration, data *gmap.StrAnyMap) (*gmap.StrAnyMap, error)
  31. // SetSession updates the data for specified session id.
  32. // This function is called ever after session, which is changed dirty, is closed.
  33. // This copy all session data map from memory to storage.
  34. SetSession(ctx context.Context, id string, data *gmap.StrAnyMap, ttl time.Duration) error
  35. // UpdateTTL updates the TTL for specified session id.
  36. // This function is called ever after session, which is not dirty, is closed.
  37. UpdateTTL(ctx context.Context, id string, ttl time.Duration) error
  38. }

The timing of each method’s invocation is explained in detail within the comments, and developers can fully refer to the several built-in Storage implementations when implementing custom Storage.

Considerations

  • In the Storage interface, not all interface methods need to be implemented. Developers only need to implement some interfaces according to the specific invocation timing required by their business needs.
  • To enhance the execution performance of Session, the interface uses the gmap.StrAnyMap container type. During development, you can refer to this section: Map