• 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
    ", 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> 下一章讲布局页面

  • 相关阅读:
    创建基于MailKit和MimeKit的.NET基础邮件服务
    MailKit---获取邮件
    C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
    .net 开源 FTP 组件 edtFTPnet
    Consul1-window安装consul
    通信传输利器Netty(Net is DotNetty)介绍
    工作中,如何衡量一个人的 JavaScript 编码水平?
    10个有趣又能编译为JavaScript的语言,你用过哪些?
    一定要你明白Java中的volatile
    面试总被问到HTTP缓存机制及原理?看完你就彻底明白了
  • 原文地址:https://www.cnblogs.com/tudaogaoyang/p/8022848.html
Copyright © 2020-2023  润新知