session.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "time"
  7. "golang-fave/utils"
  8. "github.com/vladimirok5959/golang-server-sessions/session"
  9. )
  10. func session_clean_start(www_dir string) (chan bool, chan bool) {
  11. ch := make(chan bool)
  12. stop := make(chan bool)
  13. go func() {
  14. for {
  15. // Destroy old session files on each host
  16. // Every one hour
  17. select {
  18. case <-time.After(1 * time.Hour):
  19. files, err := ioutil.ReadDir(www_dir)
  20. if err == nil {
  21. for _, file := range files {
  22. select {
  23. case <-stop:
  24. break
  25. default:
  26. tmpdir := www_dir + string(os.PathSeparator) + file.Name() + string(os.PathSeparator) + "tmp"
  27. if utils.IsDirExists(tmpdir) {
  28. session.Clean(tmpdir)
  29. }
  30. }
  31. }
  32. }
  33. case <-ch:
  34. ch <- true
  35. return
  36. }
  37. }
  38. }()
  39. return ch, stop
  40. }
  41. func session_clean_stop(ch, stop chan bool) {
  42. for {
  43. select {
  44. case stop <- true:
  45. case ch <- true:
  46. <-ch
  47. return
  48. case <-time.After(10 * time.Second):
  49. fmt.Println("Session cleaner error: force exit by timeout after 10 seconds")
  50. return
  51. }
  52. }
  53. }