webpy使用系列之session的使用,雖然工作中使用的是django,但是自己並不喜歡那種大而全的東西~什麼都給你準備好了,自己好像乙個機械人一樣趕著重複的基本工作,從在學校時候就養成了追究原理的習慣,從而有了這篇session的使用和說明。下面為官方的例子,用session來儲存頁面訪問的次數,從而實現對訪問次數的記錄。
(ps,這裡記錄是針對乙個客戶端來說的訪問次數,而不是官方文件說的統計有多少人正在使用session,因為每個客戶端的session並不相同,伺服器會根據不同的sessionid來區分不同的客戶端的session)
需要注意的是,官方說明在除錯情況下,session並不能正常的執行,所以需要在非除錯摸下測試,那麼就有了下面的這個例子。
import在官方文件中,對上述debug模式的現象給出了這樣的解釋:web#非除錯模式
web.config.debug =false
urls =(
"/count
", "
count",
"/reset
", "
reset")
sessions
'), initializer=)
class
count:
defget(self):
session.count += 1
return
str(session.count)
class
reset:
defget(self):
session.kill()
return
""if
__name__ == "
__main__
":
session與除錯模試下的重呼叫相衝突(有點類似firefox下著名的firebug外掛程式,使用firebug外掛程式分析網頁時,會在火狐瀏覽器之外單獨對該網頁發起請求,所以相當於同時訪問該網頁兩次)
為了解決上述問題,官方給出了進一步的解決方法,如下
import由於web.session.session會過載兩次,但是在上面的_session並不會過載兩次,因為上面多了乙個判斷_session是否存在於web.config中。weburls = ("
/", "
hello")
if web.config.get('
_session
') is
none:
sessions
'), )
web.config._session =session
else
: session =web.config._session
class
hello:
defget(self):
'session
', session
session.count += 1
return
'hello, %s!
' %session.count
if__name__ == "
__main__
":
其實,在web.py檔案中,定義了config,而storage在下面的圖中並沒有特殊的結果,像字典一樣~
雖然官方文件中提到,只能在主程式中使用session,但是通過新增__init__.py可以條用到該頁面的session,也就是說一樣使用session。
官方給出的方法更加合理化一點,通過應用處理器,載入鉤子(loadhooks)
def結果如下,我在處理中列印了session:my_loadhook():
"my load hook
"def
my_unloadhook():
"my unload hook
"
從而,可以再web.loadhook()中載入session資訊,在處理之前從web.ctx.session中獲取session了,甚至可以在應用處理器中新增認證等操作。
#對於伺服器來說,怎樣才能區分不同客戶端呢,怎樣才能區分不同客戶端的session呢?main.py
defsession_hook():
web.ctx.session =session
#views.py
class
edit:
defget(self):
try:
session =web.ctx.session
username =session.username
ifnot
username:
return web.redirect('
/login')
except
exception as e:
return web.redirect('
/login')
return render_template('
edit.html
')
是通過sessionid來實現的,最初我還傻傻的分不清session和cookie,以及不同使用者之間的資訊室如何分配的!
如上圖,是生成sessionid的**段,其中包含了隨機數、時間、ip以及秘鑰。
在客戶端訪問伺服器時,伺服器會根據上述資訊來計算乙個針對客戶端唯一的sessionid,並通過cookie儲存在客戶端中。
客戶端用cookie儲存了sessionid,當我們請求伺服器的時候,會把這個sessionid一起發給伺服器,伺服器會到記憶體中搜尋對應的sessionid,如果找到了對應的 sessionid,說明我們處於登入狀態,有相應的許可權;如果沒有找到對應的sessionid,這說明:要麼是我們把瀏覽器關掉了(後面會說明為什 麼),要麼session超時了(沒有請求伺服器超過20分鐘),session被伺服器清除了,則伺服器會給你分配乙個新的sessionid。你得重新登入並把這個新的sessionid儲存在cookie中。
session的結構
上面提到了session在webpy中式一種dict的方式儲存,
在webpy的session中,儲存方式包括兩種diskstore和dbstore,分別為硬碟儲存和資料庫儲存。
而session的儲存也可以看出來,把sessionid作為key來儲存session資訊
webpy使用筆記(一)
工作環境中需要經常生產和測試伺服器,機房一直很混亂,因此萌生了開發乙個簡單方便的伺服器管理系統 說的好高大上,其實就是個可以獲取伺服器資訊的小web應用 之所以選擇webpy,正式因為它夠簡單,尤其是對於我這種python新人來說。它是一款輕量級的python web開發框架,對於個人開發小應用來說...
git 使用筆記二
通過最近git的學習以使用,感覺是越來越順手了,也更深入了 git有四種原子物件 1塊 blob 內容 2目錄樹 tree 關係 3提交 commit 4標籤 tag 物件id為sha1雜湊,表示為40位的16進製制數,具有全域性唯一標識 例 git hash object file name 生成...
Mac使用筆記(二)
前一篇mac使用筆記 談論了一些我使用mac os x的心得,但內容太少,隨著我進一步使用,我發現了更多有趣和有用的功能,所以有了這個第二篇,文章介紹的不完全是使用的技巧,有些是對系統的機制的說明,有些則是對mac os x的設計理念的評述。18,瀏覽器safari的前進和後退 前進,兩個手指向左划...