Beego框架開發之常見錯誤01-設定session時候的幾種錯誤-invalid memory address or nil pointer dereference
阿新 • • 發佈:2018-12-15
|
1. Session
今天我們來講解一下beego框架開發裡面的第一種常見的錯誤,而且有時候這些錯誤隱藏的不好找,有些地方語法根本沒有錯誤,所有找錯誤的時候如果沒有注意到,那麼 就會很不好找bug,特別對於新手來說,如果這些錯誤不注意那麼很容易犯錯。 先來看一下介紹
what is cookie?
cookie是儲存在客戶端的,用於標識客戶身份的!
what is session
session 是儲存在服務端,也是用於客戶身份標識,用於跟蹤使用者會話。
BeeGo session儲存方式
Beego內建了session模組,目前session模組支援的後端引擎包括memory,cookie,file,mysql,redis,couchbase,memcache、postgres,使用者也可以根據相應的interface實現自己的引擎。 我們先來看一下設定session的語法
this.SetSession("userName",username)
在beego裡設定session的只需要這一句話就行了, 通過這種方式就可以開啟session
func (this *MainController) Get() { v := this.GetSession("asta") if v == nil { this.SetSession("asta", int(1)) this.Data["num"] = 0 } else { this.SetSession("asta", v.(int)+1) this.Data["num"] = v.(int) } this.TplName = "index.tpl" }
著這裡我們驗證登入的時候看一下如下程式碼
func (this *Index)ShowIndex(){
userName:=this.GetSession("userName") //獲取session
if userName==nil{
this.Redirect("/login",302)
return
}
this.Data["userName"]=userName //給後臺傳資料
this.TplName="index.html"
}
在這裡需要注意一下,if userName==nil 這句話,有可能新手會判斷為""空字串,這裡的小錯不要犯,應該判斷為空。
常犯錯誤
有些新手可能經常犯無效的記憶體地址或空指標異常的錯誤,如圖 報錯是這樣的,但是到檔案中149行檢視語句就是
this.SetSession("userName",username)
這句語句,這句語句有什麼錯呢,語法上完全沒有錯,這時候很多新手可能就會鬱悶找不到錯誤, 這是因為session沒有初始化的原因,beego裡面session是預設沒有初始化的,在開發文件上有兩種方式初始化session
beego 中使用 session 相當方便,只要在 main 入口函式中設定如下:
beego.BConfig.WebConfig.Session.SessionOn = true
或者通過配置檔案配置如下:
sessionon = true
這樣就不會報錯了。