session.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package session
  2. import (
  3. "encoding/gob"
  4. "net/http"
  5. "x-ui/database/model"
  6. "github.com/gin-contrib/sessions"
  7. "github.com/gin-gonic/gin"
  8. )
  9. const (
  10. loginUserKey = "LOGIN_USER"
  11. defaultPath = "/"
  12. )
  13. func init() {
  14. gob.Register(model.User{})
  15. }
  16. func SetLoginUser(c *gin.Context, user *model.User) {
  17. if user == nil {
  18. return
  19. }
  20. s := sessions.Default(c)
  21. s.Set(loginUserKey, *user)
  22. }
  23. func SetMaxAge(c *gin.Context, maxAge int) {
  24. s := sessions.Default(c)
  25. s.Options(sessions.Options{
  26. Path: defaultPath,
  27. MaxAge: maxAge,
  28. HttpOnly: true,
  29. SameSite: http.SameSiteLaxMode,
  30. })
  31. }
  32. func GetLoginUser(c *gin.Context) *model.User {
  33. s := sessions.Default(c)
  34. obj := s.Get(loginUserKey)
  35. if obj == nil {
  36. return nil
  37. }
  38. user, ok := obj.(model.User)
  39. if !ok {
  40. s.Delete(loginUserKey)
  41. return nil
  42. }
  43. return &user
  44. }
  45. func IsLogin(c *gin.Context) bool {
  46. return GetLoginUser(c) != nil
  47. }
  48. func ClearSession(c *gin.Context) {
  49. s := sessions.Default(c)
  50. s.Clear()
  51. s.Options(sessions.Options{
  52. Path: defaultPath,
  53. MaxAge: -1,
  54. HttpOnly: true,
  55. SameSite: http.SameSiteLaxMode,
  56. })
  57. }