第二十九篇: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)
}

 

  

 

posted @ 2020-06-18 16:53  痞子胥  阅读(260)  评论(0)    收藏  举报