作者:韩铁衣 | 来源:互联网 | 2023-09-11 05:51
问题:
使用beego框架,浏览器访问/login?exit=true时,跳转到的的是/
代码:
路由注册
1 2 3 4
| func init() {
beego.Router("/login", &controllers.LoginController{})
beego.Router("/", &controllers.MainController{})
} |
就两个。
登陆时使用/login,退出时使用/login?exit=true。
LoginController的Get方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func (this *LoginController) Get() {
isExit := this.Input().Get("exit") == "true"
if isExit {
beego.Trace("login/isexit")
this.Ctx.SetCOOKIE("uname", "", -1, "/")
this.Ctx.SetCOOKIE("pwd", "", -1, "/")
this.Redirect("/", 301)
return
}
this.TplName = "login.html"
this.Data["Title"] = "login"
} |
所以登陆和退出都通过/login。只是退出时,带有参数。
在safari上观察到的行为:
在浏览器中输入http:localhost:8080/login?exit=true时,bee run的输出如下
1 2 3 4 5 6 7 8 9 10
| 2017/11/03 14:43:43 [D] [default.go:16] home/get
2017/11/03 14:43:43 [D] [server.go:2568] | 127.0.0.1| 200 | 1.341276ms| match| GET / r:/
2017/11/03 14:43:43 [D] [default.go:16] home/get
2017/11/03 14:43:43 [D] [server.go:2568] | 127.0.0.1| 200 | 666.276µs| match| GET / r:/
2017/11/03 14:43:44 [D] [login.go:18] login/isexit
2017/11/03 14:43:44 [D] [server.go:2568] | 127.0.0.1| 301 | 62.869µs| match| GET /login r:/login
2017/11/03 14:43:44 [D] [default.go:16] home/get
2017/11/03 14:43:44 [D] [server.go:2568] | 127.0.0.1| 200 | 1.067127ms| match| GET / r:/
2017/11/03 14:43:44 [D] [default.go:16] home/get
2017/11/03 14:43:44 [D] [server.go:2568] | 127.0.0.1| 200 | 726.463µs| match| GET / r:/ |
可以看到一共相应了五次,中间一次是/login。但是一般正常的时候,访问/login都是只有一次match的输出。
这次算是match到了/login。但是不是每次都能match到。这一点让我很困惑。