1. 程式人生 > >python session過期timeout處理

python session過期timeout處理

1、使用webpy自身帶的session配置選項,具體如下:

web.config.session_parameters['cookie_name'] = 'webpy_session_id'
web.config.session_parameters['cookie_domain'] = None
web.config.session_parameters['timeout'] = 86400, #24 * 60 * 60, # 24 hours   in seconds
web.config.session_parameters['ignore_expiry'] = True
web.config.session_parameters['ignore_change_ip'] = True
web.config.session_parameters['secret_key'] = 'fLjUfxqXtfNoIldA0A0J'
web.config.session_parameters['expired_message'] = 'Session expired'
  • cookie_name - 儲存session id的Cookie的名稱
  • cookie_domain - 儲存session id的Cookie的domain資訊
  • timeout - session的有效時間 ,以秒為單位
  • ignore_expiry - 如果為True,session就永不過期
  • ignore_change_ip - 如果為False,就表明只有在訪問該session的IP與建立該session的IP完全一致時,session才被允許訪問。
  • secret_key - 密碼種子,為session加密提供一個字串種子
  • expired_message - session過期時顯示的提示資訊。
根據選項的解釋。即當設定
'ignore_expiry'=True

則即使過期時間到,也不會提示客戶端session過期,但是會在伺服器端把之前的session刪除,重新生成一個session;即此時等同於新來的請求,後面該登入的還要重新登入;否則如果該值為False,那麼在session過期時間後【即timeout所設定的時間】,將會返回字串

Session expired
給客戶端,這樣的體驗定然是不好的,所以該用的時候還得用。http://webpy.org/cookbook/sessions.zh-cn官網幫助文件地址

2、使用自定義session類的方法來重寫session過期後的返回操作,如重定向。

新建一個檔名稱為session.py,其新建一個MySession類,並重寫其expired方法。

import web
from web.session import Session
 
class MySessionExpired(web.HTTPError):
    def __init__(self, headers,message):
        web.HTTPError.__init__(self, '200 OK', headers, data=message)
 
class MySession(Session):
    def __init__(self, app, store, initializer=None):
        Session.__init__(self,app,store,initializer)
 
    def expired(self):
        self._killed = True
        self._save()
        message = self._config.expired_message
        headers = {'Content-Type': 'text/html','Refresh':'2;url="/account/login"'}
        raise MySessionExpired(headers, message)
如何使用:
import web
from session import MySession
 
web.config.session_parameters['cookie_name'] = 'myapp_sessid'
web.config.session_parameters['cookie_path'] = '/'
web.config.session_parameters['timeout'] = 120
web.config.session_parameters['ignore_expiry'] = False
web.config.session_parameters['ignore_change_ip'] = True
web.config.session_parameters['secret_key'] = 'Jp9kLsy7Fre5m2sNxz3RwAq'
web.config.session_parameters['expired_message'] = 'Session expired, will redirect...'
session = MySession(app, web.session.DiskStore('sessions'), {})

原文部落格地址: http://space.wudiweb.com/phychion/blog/9