webpy使用筆記 二 session的使用

2021-09-22 06:45:12 字數 3734 閱讀 6239

webpy使用系列之session的使用,雖然工作中使用的是django,但是自己並不喜歡那種大而全的東西~什麼都給你準備好了,自己好像乙個機械人一樣趕著重複的基本工作,從在學校時候就養成了追究原理的習慣,從而有了這篇session的使用和說明。

下面為官方的例子,用session來儲存頁面訪問的次數,從而實現對訪問次數的記錄。

(ps,這裡記錄是針對乙個客戶端來說的訪問次數,而不是官方文件說的統計有多少人正在使用session,因為每個客戶端的session並不相同,伺服器會根據不同的sessionid來區分不同的客戶端的session)

需要注意的是,官方說明在除錯情況下,session並不能正常的執行,所以需要在非除錯摸下測試,那麼就有了下面的這個例子。

import

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__

":

在官方文件中,對上述debug模式的現象給出了這樣的解釋:

session與除錯模試下的重呼叫相衝突(有點類似firefox下著名的firebug外掛程式,使用firebug外掛程式分析網頁時,會在火狐瀏覽器之外單獨對該網頁發起請求,所以相當於同時訪問該網頁兩次)

為了解決上述問題,官方給出了進一步的解決方法,如下

import

weburls = ("

/", "

hello")

if web.config.get('

_session

') is

none:

sessions

'), )

web.config._session =session

else

: session =web.config._session

class

hello:

defget(self):

print

'session

', session

session.count += 1

return

'hello, %s!

' %session.count

if__name__ == "

__main__

":

由於web.session.session會過載兩次,但是在上面的_session並不會過載兩次,因為上面多了乙個判斷_session是否存在於web.config中。

其實,在web.py檔案中,定義了config,而storage在下面的圖中並沒有特殊的結果,像字典一樣~

雖然官方文件中提到,只能在主程式中使用session,但是通過新增__init__.py可以條用到該頁面的session,也就是說一樣使用session。

官方給出的方法更加合理化一點,通過應用處理器,載入鉤子(loadhooks)

def

my_loadhook():

print

"my load hook

"def

my_unloadhook():

print

"my unload hook

"

結果如下,我在處理中列印了session:

從而,可以再web.loadhook()中載入session資訊,在處理之前從web.ctx.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

')

對於伺服器來說,怎樣才能區分不同客戶端呢,怎樣才能區分不同客戶端的session呢?

是通過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的前進和後退 前進,兩個手指向左划...