2009-10-12 62 views

回答

7

cgi上沒有「會話」。如果您使用原始的cgi,您必須推出自己的會話處理代碼。

基本上,會話的工作原理是創建一個唯一的cookie號碼並將其發送到客戶端的響應頭上,然後在每個連接上檢查這個cookie。將會話數據存儲在服務器(內存,數據庫,磁盤)的某個位置,並使用cookie編號作爲密鑰,以便在客戶端發出的每個請求中檢索它。

但是cgi不是你如何在python中爲web開發應用程序。使用wsgi。使用Web框架。

下面是使用cherrypy的快速示例。 cherrypy.tools.sessions是CherryPy的工具來處理cookie的設置/檢索和關聯數據自動:

import cherrypy 

class HelloSessionWorld(object): 
    @cherrypy.tools.sessions() 
    def index(self): 
     if 'data' in cherrypy.session: 
      return "You have a cookie! It says: %r" % cherrypy.session['data'] 
     else: 
      return "You don't have a cookie. <a href='getcookie'>Get one</a>." 
    index.exposed = True 

    @cherrypy.tools.sessions() 
    def getcookie(self): 
     cherrypy.session['data'] = 'Hello World' 
     return "Done. Please <a href='..'>return</a> to see it" 
    getcookie.exposed = True 

application = cherrypy.tree.mount(HelloSessionWorld(), '/') 

if __name__ == '__main__': 
    cherrypy.quickstart(application) 

注意,這個代碼是wsgi應用,在這個意義上,你可以將其發佈到任何使能的wsgi Web服務器(Apache的有mod_wsgi)。此外,CherryPy的有自己的wsgi服務器,這樣你就可以只運行與Python代碼,它會開始http://localhost:8080/

+0

+1 WSGI ......當然在此期間,你可以通過CGI部署WSGI。事實上,它可能是一個好主意,因爲單進程運行一次方案意味着您不必擔心dev服務器上的模塊重新加載問題。 – bobince 2009-10-12 14:38:42

1

服務我的「低成本」的網絡託管計劃不允許使用WSGI。 'mod_wsgi'apache模塊不能被使用,因爲它是一個共享的apache服務器。我正在開發自己的班級。

爲了不從零開始,我嘗試在這個網站上提供的會話類的實現:http://cgi.tutorial.codepoint.net/a-session-class

相關問題