token.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * @Descripttion:
  3. * @version:
  4. * @Author: Neo,Huang
  5. * @Date: 2020-11-07 16:16:27
  6. * @LastEditors: Neo,Huang
  7. * @LastEditTime: 2020-11-11 14:24:49
  8. */
  9. //提交验证码管理
  10. package models
  11. import (
  12. "fmt"
  13. "math/rand"
  14. "sync"
  15. "time"
  16. "box-gm/utils"
  17. )
  18. var tokenRond *rand.Rand
  19. var tokens map[string]int64
  20. var tokenMutex sync.Mutex
  21. func init() {
  22. tokenRond = rand.New(rand.NewSource(time.Now().UnixNano()))
  23. tokens = make(map[string]int64)
  24. }
  25. func GetToken() string {
  26. tokenMutex.Lock()
  27. defer tokenMutex.Unlock()
  28. now := time.Now().Unix()
  29. for {
  30. token := utils.Strtomd5(fmt.Sprintf("%v%v", now, tokenRond.Intn(999999)))
  31. _, ok := tokens[token]
  32. if ok {
  33. continue
  34. }
  35. tokens[token] = now
  36. return token
  37. }
  38. }
  39. func CheckToken(token string) bool {
  40. if token == "" {
  41. return false
  42. }
  43. tokenMutex.Lock()
  44. defer tokenMutex.Unlock()
  45. _, ok := tokens[token]
  46. return ok
  47. }
  48. func DelToken(token string) {
  49. if token == "" {
  50. return
  51. }
  52. tokenMutex.Lock()
  53. defer tokenMutex.Unlock()
  54. _, ok := tokens[token]
  55. if ok {
  56. delete(tokens, token)
  57. }
  58. //超过10分钟就删除
  59. now := time.Now().Unix()
  60. for k, v := range tokens {
  61. if now-v >= 600 {
  62. delete(tokens, k)
  63. }
  64. }
  65. return
  66. }