2013-02-26 21 views
30

元のadmin login()とAuthenticationFormを再利用して、ログインページで「remember me」オプションをチェックしたユーザーのCookieの長さを長く設定するにはどうすればよいですか?私は現在を通じて内蔵のログインを使用していますurls.pyDjangoログインビューと認証フォームが組み込まれた「Remember Me」

url(r'^login/$','django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'), 

チェックボックスのように私のlogin.htmlとで実装されています

<label><input name="remember_me" type="checkbox">Keep me logged in</label> 

が、私はを通じてその情報を渡す方法を確認していませんユーザーがログインするには、「私を覚えている」場合

現在django.contrib.auth.views.loginにAuthenticationFormは、未チェックボックスは、クッキーの年齢はsettings.py

SESSION_COOKIE_AGE = 360 
01で定義されています

似たような質問がいくつか見つかりましたが、別のアプリをインストールする必要はありません。以下のスニペット(http://djangosnippets.org/snippets/1881/)は有望に見えたが、私は数ヶ月のカップルのためのpythonとDjangoをコード化していると私はそれを動作させることができませんでした:

def login(request, *args, **kwargs): 
    if request.method == 'POST': 
     if not request.POST.get('remember_me', None): 
      request.session.set_expiry(0) 
    return auth_views.login(request, *args, **kwargs) 
+0

スニペットは実際には別の方法で動作しますが、主な考え方はまだチェックボックスの選択に基づいてクッキーの有効期限を設定することです。 – Sawwy

+0

スニペットは正しいです。ちょうど覚えておいたログインの期限まで 'SESSION_COOKIE_AGE'を設定し、一回限りのログインの満了まで' request.session.set_expiry(0) 'の中に' 0'を設定してください。 – okm

+0

これで、デフォルトのセッション長が5秒でセッションが30秒であることを覚えています。ただし、set_expiry(0)を使用すると、ブラウザを閉じるときにセッションが削除されません(タブではなくブラウザ全体を閉じる)。この問題は、1)FROM django_sessionを削除する(データベースからすべてのセッション情報を削除する)2)すべてのブラウザ履歴を消去する(Chrome 25.0.1364.97)。私は最初から始めますが、これはユーザーがログインしている間はログインしたままになります。何か他に必要なことはありますか? – Sawwy

答えて

14

ジャンゴセッションCookie年齢はsecondsで定義されています。

SESSION_COOKIE_AGE = 360 

は、セッションが6分後に失効することを意味します。私は最近、「私を忘れないでください」機能を実装しましたし、私は次のように設定します。

SESSION_COOKIE_AGE = 60 * 60 * 24 * 30 # One month 

スニペットに示してきたように、ログインビューをオーバーライドする必要があります。

しかし、ブラウザを閉じて(私のことを覚えていない場合)、ユーザが再ログインする必要はありません。これはset_expiry(0)を使用しても起こりません。 set_expiry(0)を使うと、djangoは固定長のクッキーとは対照的に 'セッション'の長さのクッキーを設定し、ブラウザの終了後に有効期限が切れます。

ブラウザの終了時にCookieを消去するための別の設定があります。 SESSION_EXPIRE_AT_BROWSER_CLOSE設定の値を変更したり、設定内の既存の値をチェックしたりすることができます。 https://docs.djangoproject.com/en/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

関連する問題