Beego 學習筆記14:Session控制


 

 

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> 下一章講布局頁面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM