4

私はbottle.pyとbeaker.middleware.SessionMiddleware:を使用してアプリを書いています

ユーザーを30日間ログインさせるログインシステムを実装できるように、値session.timeoutと値を変更するにはどうすればよいですか?session.cookie_expires

すでに標準のログインシステムを実装しているので、ブラウザが閉じるまですべてが機能しますが、ユーザーが[記憶する]チェックボックスをオンにした場合は、これらの値を変更したいと思います。

ユーザーが[ Rememberme ]チェックボックスをオンにした場合、2つのバリエーションを考えました。

  • 30日に設定session.cookie_expiressession.timeoutますが、受信したCookieはブラウザセッションの終了時に期限切れになり、実行時の変更を無視するため、実行時にこれらの値を変更できないようです。

  • 30日に設定し、同じセッションIDで有効期限が異なる書き込みsession.timeoutという名前のCookieを上書きします。beaker.session.idしかし、ポイント1からの実行時の問題が残っており、ビーカーで作成したセッションのIDにアクセスできないようで、Cookieに何を保存するかわかりません。

どうすればこれを実装できますか?

4

1 に答える 1

1

私が思いついた唯一の解決策は、ビーカーを使わずに、自分で小さなバックエンドを実装してCookieを設定することです。

後世のために、コードはここにあります: https ://github.com/paulbarbu/bottle-upload/blob/master/index.py メソッド:login_bl、、、および。これは非常に古いコードであり、本番環境に対応していないことに注意してください。自己責任で使用してください。上記のリンクのコードスニペットは次のとおりです。upload_view(db)is_logged_inlogout()

ログイン:

@post('/login')
def login_bl(db):
import hashlib

nick = request.forms.nick.lower()
password = hashlib.sha1(request.forms.password).hexdigest()

message = {}
error = None

uid  = get_user_id(db, nick, password)

if uid:
    sess = request.environ.get('beaker.session')
    sess['uid'] = uid
    # .... do other stuff for the logged in user

ログアウト:

@get('/logout')
def logout():
if not is_logged_in():
    redirect('/login')
else:
    sess = request.environ.get('beaker.session')
    sess.delete()

return template('logout.tpl')

ユーザーはログインしていますか?

def is_logged_in():
'''Check whether the user sent a cookie that holds a Beaker created
session id
'''

sess_id = request.cookies.get('beaker.session.id', False)

if not sess_id:
    return False

sess = request.environ.get('beaker.session')

if 'uid' not in sess:
    return False

return True
于 2012-05-03T15:46:03.513 に答える