nginx+web.py+fastcgi(spawn-fcgi)的session失效問題

web.py是用DiskStore保存session文件的,參考官網的例子,結果直接python code.py運行沒問題,但和nginx結合就不行了,具體表現是:瀏覽器每發起一個請求,就會生成一個session文件。這也導致了向session存儲數據失效。

這個問題折磨了我兩天,Google上也很難找到相關說法。最後在 https://github.com/webpy/webpy/issues/132

找到了些靈感,原來是cookie path的問題!

解決方法: 

修改 /usr/local/lib/python2.7/site-packages/web/session.py的第148行(web.py 0.37版本)

web.setcookie(cookie_name, session_id, expires=expires, domain=cookie_domain, httponly=httponly, secure=secure    , path=cookie_path)

path=cookie_path 改成 path= '/'

問題解決!

後來分析應該就是是web.py的bug,比如訪問 http://127.0.0.1/hello ,web.py會把sessionid的cookie的

path設置為 "/hello" (實際應該是"/"),當然我這種改動太暴力了些,只對「只使用根目錄」的應用有效,

如果你使用多層的目錄URL,或者有一套複雜的session設計,那肯定不能照搬。

你可能感兴趣的:(web.py,webpy)