3

私は最近、Web アプリを apache + Mod_python から単に cherry-py に移行するプロジェクトを開始しました。

やらなければならないことはまだたくさんありますが、今のところ、ちょっと頭を悩ませているのは CherryPy のセッションです。

私の最初の質問は、それらがどのように機能するかです。

Mod_python では、次のようにします。

...
from mod_python import Session
sess = Session.Session(req, timeout = 60*60, lock=0)
#req is the request page object.

CherryPy のドキュメントから判断すると、セッションを開始するために必要なことは、次のようなものを追加して構成を変更することだけです。

cherrypy.config.update({
    'tools.sessions.on': True, 
    'tools.sessions.storage_type': 'ram'})

上記のデフォルトの時間は 60 分ですが (手動で設定することもできます)、そのセッションを破棄して新しいセッションを作成したい場合はどうすればよいでしょうか? cherrypy.lib.sessions.expire()任意のファイルを呼び出してから、cherrypy.config.updateもう一度やり直しますか? それとも、CherryPy 自体が新しいセッションを作成しますか? 別の有効期限で新しいセッションを作成したい場合はどうすればよいですか?

注: 任意のファイルとは、CherryPy を実行していないファイルを意味します (私の「構成」ファイルは、Mod_Python に付属する標準の Publisher のように、他のページから HTML をインポートして取得します)。

簡単な小さなテストファイルを作成してみました:

import cherrypy
from cherrypy.lib import sessions

def index(sid=0, secret=None, timeout=30, lock=1):
    cherrypy.session['test'] = 'test'
    cherrypy.lib.sessions.expire()
    return cherrypy.session.get('test','None')

最終結果は、「test」がまだ画面に表示されていることです。これは、クライアント側のセッションが期限切れになったために発生していますが、ローカル セッションにはまだデータがありますか? その場合、セッションの有効期限が切れているかどうかを確認するにはどうすればよいですか?

紛らわしい質問で申し訳ありませんが、私は混乱しています。

ご助力いただきありがとうございます!

4

1 に答える 1

8

これを試して、セッションを終了してください。

sess = cherrypy.session
sess['_cp_username'] = None

これを試してセッションを作成してください...

cherrypy.session.regenerate()
cherrypy.session['_cp_username'] = cherrypy.request.login

この例を使用して、ほとんどのセッションアクティビティを処理しました。

http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions

お役に立てれば、

アンドリュー

于 2012-07-26T20:27:08.957 に答える