第二十九篇:httpserver学习(2):路由、设置cookie、注销、判断登录
一:路由分发器

二:练习:假设访问/ 一切ok,如果访问/admin 则需要登录(判断cookie中是否有username这一项)
2.1:先写登录的路由
package main
import (
"net/http"
)
type MyHandler struct {
}
func (*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){
writer.Write([]byte("hello,myhandler"))
}
func main() {
mymux:=http.NewServeMux()
//(1):方法1:mymux.Handle("/",&MyHandler{})
//(2):方法2:mymux.HandleFunc()
mymux.HandleFunc("/login", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("这里是登录页"))
})
mymux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("这里是首页"))
})
http.ListenAndServe(":8099",mymux)
}
2.2:接2.1为了实现登录,我们规定,如果访问的是:/login?username=xxoo,那么就设置 cookie:username=xxoo(写死值)
知识点1:获取query参数
request.URL.Query().Get("xxoo"),如果没有则返回""(不是nil)
知识点2:设置cookie
c:=&http.Cookie{Name:"username",Value:getusername,Path:"/"}
http.SetCookie(writer,c)
代码如下:
package main
import (
"net/http"
)
type MyHandler struct {
}
func (*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){
writer.Write([]byte("hello,myhandler"))
}
func main() {
mymux:=http.NewServeMux()
//(1):方法1:mymux.Handle("/",&MyHandler{})
//(2):方法2:mymux.HandleFunc()
mymux.HandleFunc("/login", func(writer http.ResponseWriter, request *http.Request) {
getUserName:=request.URL.Query().Get("username")
if getUserName!=""{
c:=&http.Cookie{Name:"username",Value:getUserName,Path:"/"}
http.SetCookie(writer,c)
}
writer.Write([]byte("这里是登录页1"))
})
mymux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("这里是首页"))
})
http.ListenAndServe(":8099",mymux)
}
浏览器请求如下:

2.3:退出和跳转
package main
import (
"net/http"
"time"
)
type MyHandler struct {
}
func (*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){
writer.Write([]byte("hello,myhandler"))
}
func main() {
mymux:=http.NewServeMux()
//(1):方法1:mymux.Handle("/",&MyHandler{})
//(2):方法2:mymux.HandleFunc()
mymux.HandleFunc("/login", func(writer http.ResponseWriter, request *http.Request) {
getUserName:=request.URL.Query().Get("username")
if getUserName!=""{
c:=&http.Cookie{Name:"username",Value:getUserName,Path:"/"}
http.SetCookie(writer,c)
}
writer.Write([]byte("这里是登录页1"))
})
mymux.HandleFunc("/unlogin", func(writer http.ResponseWriter, request *http.Request) {
//把过期时间设置为负数,肯定就过期了;
c:=&http.Cookie{Name:"username",Value:"",Path:"/",Expires:time.Now().AddDate(-1,0,0)}
writer.Header().Set("Content-type","text/html")
http.SetCookie(writer,c)
writer.Write([]byte("正在退出......"))
//写个js脚本的跳转
script:=`<script>
setTimeout(()=>{self.location="/"},2000)
</script>`
writer.Write([]byte(script))
})
mymux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("这里是首页"))
})
http.ListenAndServe(":8099",mymux)
}

浙公网安备 33010602011771号