雑多なメモ置き場スマートフォン用の表示で見る雑多なメモ置き場2013-03-09Djangoのセッション管理についてdjango普段django使ってアプリ開発とかしてるわけですが、実は中身がどうなってるのかあまり知らずに使ってます。今日はなんとなくセッション管理について調べてみました。入れるとはいえ、どちらもデフォルトで入っている。セッション使わない場合は外したほうがパフォーマンスがよいのでしょう。セッションエンジンセッションはデフォルトではdbに保存されるテーブル名はdjango_sessionモデルはdjango.contrib.sessions.models.Sessionsettings.SESSION_ENGINEを設定することによって、memcachedにしたり、ファイルに保存したり、クッキーベースセッションにしたりできるmemcachedのほうがパフォーマンスがよいのでしょう。永続化はされない、と。ログイン状態をどのようにセッションで管理しているかdjango-registrationを使ってログイン、ログアウトするだけのdjangoプロジェクトを作ってセッションに何が入るか見てみました。サイトにアクセスすると、Set-Cookieでsessionidが付与されます。django_sessionテーブルにはこの時点でデータが保存されてます。sec)session_keyはSet-Cookieでブラウザに渡された値ですねsession_dataには何が入ってるのでしょうか。Sessionモデルにget_decodedメソッドが用意されてるので、これで中身を見れます。Session.objects.get(session_key='d9a0e9ccb8a1ae2ceb0306599f2a9602').get_decoded(){}空の辞書でした。ログインページに飛んでみると、その時点でsesseion_dataが書きかわりました。'worked'}testcookieというのがセットされてました。djangoのdjango.contrib.auth.views.login関数がセットしたんですね。ログインしてみます302レスポンスが返されて、Set-Cookieがついてるのでsession_keyが変わりました。'django.contrib.auth.backends.ModelBackend'}ユーザーIDとbackendを保持してますねこれでcookieでsession_keyが渡されれば、どのユーザーからのアクセスかわかる、すなわちログイン状態ってわけですねログアウトしてみます。Session.objects.get(session_key='c5e527f0f14901ab8ed0a35d3943729f').get_decoded(){}ログイン状態のときセッションにセットされた値はどこで使ってるのか、みてみるとAuthenticationMiddlewareでrequest.userをセットしてるので、その辺で使ってそうです。get_user(request))get_userを追っかけてみるとdjango.contrib.auth.get_userで使ってました。userbackendにはModelBackend以外になにがあるのでしょうか調べてみるとRemoteUserBackendというのがありました。これは今度調べてみよう。AggregationでDBによって結果が異なるケース月別アーカイブ参加グループプログラミングはてなブログをはじめよう!yuheiomori0718さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。