Session控制
1> Session常用來作為全局變量使用,比如記錄當前登錄的用戶,或者頁面之間傳遞數據使用.
2> Beego框架內置了 session 模塊,目前 session 模塊支持的后端引擎包括 memory、cookie、file、mysql、redis、couchbase、memcache、postgres,用戶也可以根據相應的 interface 實現自己的引擎。若是使用標紅的部分,需要再下載對應的session包。
3> 在main.go代碼中添加啟用session方法。具體代碼如下:
package main import ( "fmt" "github.com/astaxie/beego/orm" _ "BeegoLearn/routers" "github.com/astaxie/beego" ) //初始化 func init(){ dbhost := beego.AppConfig.String("dbhost") dbport := beego.AppConfig.String("dbport") dbuser := beego.AppConfig.String("dbuser") dbpassword := beego.AppConfig.String("dbpassword") db := beego.AppConfig.String("db") //注冊mysql Driver orm.RegisterDriver("mysql", orm.DRMySQL) //構造conn連接 //用戶名:密碼@tcp(url地址)/數據庫 conn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + db + "?charset=utf8" //注冊數據庫連接 orm.RegisterDataBase("default", "mysql", conn) fmt.Printf("數據庫連接成功!%s\n", conn) } func main() { o := orm.NewOrm() o.Using("default") // 默認使用 default,你可以指定為其他數據庫 //啟用Session beego.BConfig.WebConfig.Session.SessionOn = true beego.Run() }
4> 新建一個login.go控制器,編寫session的邏輯業務
package controllers import ( "fmt" "github.com/astaxie/beego" ) type LoginController struct { beego.Controller } //登錄頁面 func (c *LoginController) Get() { c.TplName = "login.html" } //登錄功能 func (c *LoginController) Post() { name:=c.GetString("name") pwd:=c.GetString("pwd") islogin:=0 if name=="admin" && pwd=="123456"{ c.SetSession("loginuser", "adminuser") fmt.Println("當前的session:") fmt.Println(c.CruSession) }else if name!="admin"{ islogin=1 }else if pwd!="123456"{ islogin=2 } c.Data["json"]=map[string]interface{}{"islogin":islogin}; c.ServeJSON(); } //退出 type LogoutController struct { beego.Controller } //登錄退出功能 func (c *LogoutController) Post() { v := c.GetSession("loginuser") islogin:=false if v != nil { //刪除指定的session c.DelSession("loginuser") //銷毀全部的session c.DestroySession() islogin=true fmt.Println("當前的session:") fmt.Println(c.CruSession) } c.Data["json"]=map[string]interface{}{"islogin":islogin}; c.ServeJSON(); }
5> 新建一個Login.html頁面,作為展示使用
<!DOCTYPE html> <html> <head> <title>首頁 - 用戶列表頁面</title> <link rel="shortcut icon" href="/static/img/favicon.png" /> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/> <script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="form-group"> <label for="text">用戶名:</label> <input type="text" class="form-control" id="name" placeholder="用戶名"> </div> <div class="form-group"> <label for="text">密碼:</label> <input type="text" class="form-control" id="pwd" placeholder="密碼"> </div> <div class="form-group"> <button class="btn btn-primary" onclick="login()">登陸</button> <button class="btn btn-default" onclick="logout()">退出</button> </div> <div> <label id="status"></label> </div> </div> <!--JS部分--> <script type="text/javascript"> //登陸功能 function login(){ $.ajax({ type:'post', url:'/Home/Login', data:{ "name":$("#name").val(), "pwd":$("#pwd").val() }, success:function(result){ if(result.islogin==0){ $("#status").html("登陸成功") }else if(result.islogin==1){ $("#status").html("用戶名錯誤") } else if(result.islogin==2){ $("#status").html("密碼錯誤") } } }) } //登出功能 function logout(){ $.ajax({ type:'post', url:'/Home/Logout', data:{}, success:function(result){ if(result.islogin){ $("#status").html("登出成功"); }else { $("#status").html("登出失敗"); } } }) } </script> </body> </html>
6> 在路由中添加控制器,編譯項目,測試運行
package routers import ( "BeegoLearn/controllers" "github.com/astaxie/beego" ) func init() { //默認的 beego.Router("/", &controllers.MainController{}) //JS分頁 beego.Router("/Home/PageData", &controllers.UserController{}) beego.Router("/Home/PageNextData", &controllers.YonghuController{}) //Bootstrap運用 beego.Router("/Home/Index", &controllers.PageController{}) //Easyui使用 beego.Router("/Home/EasyUI", &controllers.EasyUIController{}) beego.Router("/Home/EasyUIData", &controllers.EasyUIDataController{}) //文件的上傳下載 beego.Router("/Home/FileOpt", &controllers.FileOptUploadController{}) beego.Router("/Home/FileDown", &controllers.FileOptDownloadController{}) //文件的創建,寫入,讀取,刪除 beego.Router("/Home/FileRead", &controllers.ReadController{}) beego.Router("/Home/FileWrite", &controllers.WriteController{}) beego.Router("/Home/FileCreate", &controllers.CreateController{}) beego.Router("/Home/FileDelete", &controllers.DeleteController{}) //Api接口部分 beego.Router("/api/Html", &controllers.ApiController{}) beego.Router("/api/GetJson", &controllers.ApiJsonController{}) beego.Router("/api/GetXml", &controllers.ApiXMLController{}) beego.Router("/api/GetJsonp", &controllers.ApiJsonpController{}) beego.Router("/api/GetDictionary", &controllers.ApiDictionaryController{}) beego.Router("/api/GetParams", &controllers.ApiParamsController{}) //session部分 beego.Router("/Home/Login", &controllers.LoginController{}) beego.Router("/Home/Logout", &controllers.LogoutController{}) }
7> 運行結果如下
7-1》頁面的初始效果如下:
7-2》輸入用戶名,密碼,點擊登陸按鈕
7-3》點擊退出按鈕
8>我的Beego學習筆記這個項目的代碼已經上傳到GitHub上面。具體的地址如下:https://github.com/weiyunhelong/BeegoLearn
下載下來之后,記得將mysql數據庫的配置文件進行相應的修改,不然項目編譯時通不過的喲!
9> 下一章講布局頁面