MVC 结合session

  1. // +build go1.9
  2. package main
  3. import (
  4. "fmt"
  5. "time"
  6. "github.com/kataras/iris"
  7. "github.com/kataras/iris/mvc"
  8. "github.com/kataras/iris/sessions"
  9. )
  10. // VisitController处理根路由。.
  11. type VisitController struct {
  12. //当前请求 Session
  13. //它的初始化是由我们添加到`visitApp`的依赖函数发生的。
  14. Session *sessions.Session
  15. //从MVC绑定的time.time,
  16. //绑定字段的顺序无关紧要。
  17. StartTime time.Time
  18. }
  19. // Get handles
  20. // Method: GET
  21. // Path: http://localhost:8080
  22. func (c *VisitController) Get() string {
  23. //它将整数的“访问”值递增1,
  24. //如果带有“访问”键的条目不存在,它将为您创建。
  25. visits := c.Session.Increment("visits", 1)
  26. // write the current, updated visits.
  27. since := time.Now().Sub(c.StartTime).Seconds()
  28. return fmt.Sprintf("%d visit from my current session in %0.1f seconds of server's up-time",visits, since)
  29. }
  30. func newApp() *iris.Application {
  31. app := iris.New()
  32. sess := sessions.New(sessions.Config{Cookie: "mysession_cookie_name"})
  33. visitApp := mvc.New(app.Party("/"))
  34. //将当前* session.Session绑定到`VisitController.Session`
  35. //和time.Now()到`VisitController.StartTime`。
  36. visitApp.Register(
  37. //如果依赖是一个接受的函数
  38. //一个Context并返回一个值
  39. //然后控制器解析此函数的结果类型
  40. //并且在每个请求上它将使用Context调用该函数
  41. //并将结果(此处为* sessions.Session)设置为控制器的字段。
  42. //如果没有字段或函数的输入参数,则注册依赖项
  43. //使用者然后在服务器运行之前忽略这些依赖项,
  44. //这样你就可以绑定很多dependecies并在不同的控制器中使用它们。
  45. sess.Start,
  46. time.Now(),
  47. )
  48. visitApp.Handle(new(VisitController))
  49. return app
  50. }
  51. func main() {
  52. app := newApp()
  53. // 1.打开浏览器(不在私人模式下,如google的隐身模式)
  54. // 2.导航到http:// localhost:8080
  55. // 3.刷新页面一些次数
  56. // 4.关闭浏览器
  57. // 5.重新打开浏览器并重新播放2
  58. app.Run(iris.Addr(":8080"), iris.WithoutVersionChecker)
  59. }