Djangoでのセッション制御
4641 ワード
Djangoは、
セッション情報の構成
次は一般的なオプションです. SESSION_ENGINE-セッションエンジンを構成します.デフォルトは Django.contrib.sessions.backends.db Django.contrib.sessions.backends.file Django.contrib.sessions.backends.cache Django.contrib.sessions.backends.cached_db Django.contrib.sessions.backends.signed_cookies
SESSION_FILE_PATH- SESSION_COOKIE_NAME-クッキーのセッションUIDの名前を設定します.デフォルトは SESSION_COOKIE_AGE-セッションの有効期限を設定します.
JAvascript削除sessionid失効
Djangoでは、ユーザ終了機能を実現します.最初のスキームはlogout時にjsでクッキー情報を削除することである.chromeテストを使用すると、jsはクッキーの
Djangoドキュメントを問い合わせると、 SESSION_COOKIE_HTTPONLY-
session動作原理ユーザが初めてDjangoにアクセスすると、Djangoはユーザごとに Djangoは生成したセッション関連情報を ファイルに保存されているセッション情報には、
YWZhN2M3ZWEzNjk0YWU2NjUwZDIyNzdlNTA5NDc0NGY3NzMzYzlkOTp7InVzZXJuYW1lIjoiYWRtaW4iLCJ1aWQiOiIyNjdiNzliYS0yMTNhLTQ3NDItYjA0My1kMjMzMDVhMWQ1YmUiLCJ0b2tlbiI6IjVkOTFhMjM1ZDU3ODRiODk4ZmExMDUyZGQ1ZmZiNzkwODI2N2I3OWJhMjEwMTEyNjUyMTNhNDc0MmNhZWY0ZThkYjA0M2QyMzM4Njk5ZTAwMzA1YTFkNWJlNmNmM2Q1OWIiLCJyb2xlIjoiYWRtaW4iLCJpc3N1ZV90aW1lIjoiMTQ5MDg1NzIyNiIsImV4cGlyZV90aW1lIjoiMTgwMCJ9Cg== ```
sessionid
を使用してユーザを区別する.セッション情報は、ファイル、データベース、または専用のサーバを使用して保存できる永続化処理が必要です.セッション情報の構成
settings.py
ファイルを変更し、Djangoで使用されるセッション情報を構成します.詳細ドキュメントを表示します.SESSION_ENGINE = 'Django.contrib.sessions.backends.file'
SESSION_FILE_PATH = '/var/django/session'
SESSION_COOKIE_AGE = 7200
次は一般的なオプションです.
Django.contrib.sessions.backends.db
です.Djangoはこのエンジンを使用してsessionidを保存し、Django.contrib.sessions.backends.cache
を除いて他のエンジンはデータの持続化を行い、sessionid
をデータベースまたはファイルに保存します.Django.contrib.sessions.backends.file
を使用する場合、ストレージパスが構成されます.sessionid
です.JAvascript削除sessionid失効
Djangoでは、ユーザ終了機能を実現します.最初のスキームはlogout時にjsでクッキー情報を削除することである.chromeテストを使用すると、jsはクッキーの
sessionid
を削除できず、ユーザーが正常に終了できないことが分かった.Djangoドキュメントを問い合わせると、
SESSION_COOKIE_HTTPONLY
によって引き起こされたことがわかります.True
に設定されている場合、jsはセッションクッキーにアクセスできません.jsではsessionidを削除できません.デフォルトはTrue
です.function() {
...
CommonUtil.AjaxUtil.ajaxPost(
'/logout/',
null,
function(result) {
deleteCookie('sessionid', '/');
window.location = '/';
}
);
...
}
function deleteCookie(name, path)
{
var exp = new Date();
exp.setDate(exp.getDate() - 100);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "=" + cval + ";expires=" + exp.toGMTString() + ((path == undefined) ? "" : ";path=" + path);
}
SESSION_COOKIE_HTTPONLY = True
が設定されている場合、views.py
からsessionid
を削除する必要があります.Django.contrib.auth
からviews
が導入され、logout()
関数が呼び出され、ログインユーザのsessionid
が削除される.from Django.contrib.auth import views as auth_views
def logout(request):
if request.method == "POST":
auth_views.logout(request)
return HttpResponse(json.dumps({"status": True}), content_type='application/json')
session動作原理
sessionid
を生成し、sessionid
をブラウザに送信する.SESSION_ENGINE
に保存する.本例では,セッション情報をファイルに保存し,ファイル名はsessionid
で始まり,後にsession UID
,フォーマットはsessionid
である.$ ls /tmp
sessionidqj8bevv269sxt7dzqlrny1gcw7e1hkrg
sessionid
のほか、request.session['username'] = username
を使用して追加された情報があります.ファイルはbase64
形式で符号化されます.$ cat /tmp/sessionidqj8bevv269sxt7dzqlrny1gcw7e1hkrg
YWZhN2M3ZWEzNjk0YWU2NjUwZDIyNzdlNTA5NDc0NGY3NzMzYzlkOTp7InVzZXJuYW1lIjoiYWRtaW4iLCJ1aWQiOiIyNjdiNzliYS0yMTNhLTQ3NDItYjA0My1kMjMzMDVhMWQ1YmUiLCJ0b2tlbiI6IjVkOTFhMjM1ZDU3ODRiODk4ZmExMDUyZGQ1ZmZiNzkwODI2N2I3OWJhMjEwMTEyNjUyMTNhNDc0MmNhZWY0ZThkYjA0M2QyMzM4Njk5ZTAwMzA1YTFkNWJlNmNmM2Q1OWIiLCJyb2xlIjoiYWRtaW4iLCJpc3N1ZV90aW1lIjoiMTQ5MDg1NzIyNiIsImV4cGlyZV90aW1lIjoiMTgwMCJ9Cg== ```
, 。
```shell
$ base64 -d /tmp/sessionidqj8bevv269sxt7dzqlrny1gcw7e1hkrg
afa7c7ea3694ae6650d2277e5094744f7733c9d9:{"username":"admin","uid":"267b79ba-213a-4742-b043-d23305a1d5be","token":"5d91a235d5784b898fa1052dd5ffb7908267b79ba21011265213a4742caef4e8db043d2338699e00305a1d5be6cf3d59b","role":"admin","issue_time":"1490857226","expire_time":"1800"}
```
views.py
でlogout()
が呼び出されると、Djangoはメモリ内のsessionid
を削除し、データベース内のレコードやディスク上のファイルも削除します.この例では、/tmp/sessionidqj8bevv269sxt7dzqlrny1gcw7e1hkrg
ファイルが削除されます.from Django.contrib.auth import views as auth_views
def logout(request):
if request.method == "POST":
auth_views.logout(request)
return HttpResponse(json.dumps({"status": True}), content_type='application/json')