Python Django 入門トップページ


ユーザ認証とコメント掲示板の開発

  1. プロジェクトの概要
  2. プロジェクトの作成と初期設定
  3. アプリケーションの作成と有効化
  4. ルートの記述
  5. ビューの定義
  6. HTML のテンプレート化
  7. HTML ファイルの作成
  8. Web ページ雛形の表示確認
  9. トップページの作成
  10. データベースのマイグレーション
  11. ユーザの作成
  12. ユーザ認証機能の実装
  13. セッション情報の確認
  14. ユーザ認証の状態を表示
  15. Navbar を設置
  16. モデルの作成とマイグレーション
  17. テストデータの投入
  18. コメントの一覧表示
  19. ページネーションと更新逆順表示
  20. コメント投稿機能の実装
  21. フラッシュメッセージ
  22. コメント詳細表示ページの実装
  23. 投稿者のユーザ名とメールアドレスの表示
  24. 投稿者であるかどうかの判断
  25. 編集・更新機能の実装
  26. コメント削除機能の実装
  27. Navbar の調整
  28. Profile の表示
  29. Profile の編集と更新
  30. パスワードの変更
  31. 管理サイトの準備
  32. 管理ユーザの登録
  33. 管理サイトへのログインとスタッフの登録
  34. グループの追加と権限の付与
  35. 管理サイトに comments アプリケーションを登録
  36. Comments アプリケーションから管理サイトへ

ユーザ認証とコメント掲示板の開発

セッション情報の確認

ログインとログアウトの機能が実装できたので,ログイン中のユーザの情報(つまりセッション情報)がどのように管理されているのかをここで確認しておこう.

まず,誰もログインしていない状態でデータベースの django_session テーブルの中身を確認します.次の通り,django_session テーブルにデータは一切ありません.

(base) C:\Users\lecture\Documents\django\django_comment_auth>sqlite3 db.sqlite3 ⏎
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite> .schema django_session ⏎
CREATE TABLE IF NOT EXISTS "django_session" (
    "session_key" varchar(40) NOT NULL PRIMARY KEY,
    "session_data" text NOT NULL,
    "expire_date" datetime NOT NULL
);
CREATE INDEX "django_session_expire_date_a5c62663"
    ON "django_session" ("expire_date");
sqlite> .headers ON ⏎
sqlite> select * from django_session; ⏎
sqlite>

Windows 10 の Edge を使い,user_a でログインします.ログインしている状態で django_session テーブルの中身を確認します.セッションキーが 5nteeg7y9yqta4i3z7lp2pczxh8frhat になっていることが確認できます.この値はクライアント側である Web ブラウザ (Edge) にも保存されます.また,有効期限がログインした日時のちょうど2週間後の値になっていることも確認できます.

sqlite> select * from django_session; ⏎
session_key|session_data|expire_date
5nteeg7y9yqta4i3z7lp2pczxh8frhat|.eJxVjMsOwiAQRf-FtSFAywAu3fsNZIaHVA0kpV0Z_11JutDtPefcF_O4b8XvPa1-iezMJDv9boThkeoA8Y711nhodVsX4kPhB-382mJ6Xg7376BgL9-apHCo0WhyUxRWSgshTQpzDskoDW4QgFlLQnCOjIoih8kKAwloduz9AdNqN1c:1oHduY:UJytk6CSEfAS25iF0yMN1esR8-Zt7enWfBE8so_w6oc|2022-08-13 13:17:10.414552
sqlite>

Edge では「設定」→「Cookie とサイトのアクセス許可」→「Cookie とサイトデータの管理と削除」→「すべての Cookie とサイトデータを表示する」→「127.0.0.1」と進んでいくと,Cookie に記録された sessionid を確認することができます.コンテンツの項目に同じ値 5nteeg7y9yqta4i3z7lp2pczxh8frhat が記録されています.

django2022-00088-1

さらに別のブラウザ(今回は Google Chrome)を使い user_b でログインした状態で django_session テーブルの中身を確認します.user_b には 8hh78dp8w9l9nncrqui9xdj7ixhd3azz なるセッションキーが割り当てられました.

qlite> select * from django_session; ⏎
session_key|session_data|expire_date
5nteeg7y9yqta4i3z7lp2pczxh8frhat|.eJxVjMsOwiAQRf-FtSFAywAu3fsNZIaHVA0kpV0Z_11JutDtPefcF_O4b8XvPa1-iezMJDv9boThkeoA8Y711nhodVsX4kPhB-382mJ6Xg7376BgL9-apHCo0WhyUxRWSgshTQpzDskoDW4QgFlLQnCOjIoih8kKAwloduz9AdNqN1c:1oHduY:UJytk6CSEfAS25iF0yMN1esR8-Zt7enWfBE8so_w6oc|2022-08-13 13:17:10.414552
8hh78dp8w9l9nncrqui9xdj7ixhd3azz|.eJxVjDkOQjEQQ--SGkWTlaWk5wzRZDIhH1Ai_aVC3J1E-gU0luVn-y0CbmsJ28JzmJK4CC0Ov1lEenIdID2w3pukVtd5inJU5E4XeWuJX9e9-3dQcCl9rZCsciob7ZxnnxEICWLMaShb601PLYD29qS7Pzti4EzgWRk-is8X89c4RQ:1oHe2r:zm9hs929LOH2mn9brI-mYs5HEUqvYNAyi8hHKfkgIrM|2022-08-13 13:25:45.486662
sqlite>

Google Chrome では「設定」→「プライバシーとセキュリティ」→「Cookie と他のサイトデータ」→「すべての Cookie とサイトデータを表示」→「127.0.0.1」→「sessionid」と進むことで次の画面を表示できます.やはり,コンテンツに 8hh78dp8w9l9nncrqui9xdj7ixhd3azz という値が保存されていることがわかります.

django2022-00088-2

Edge でログインしていた user_a をログアウトすると,user_a のセッション情報が削除されていることがわかります.

sqlite> select * from django_session; ⏎
session_key|session_data|expire_date
8hh78dp8w9l9nncrqui9xdj7ixhd3azz|.eJxVjDkOQjEQQ--SGkWTlaWk5wzRZDIhH1Ai_aVC3J1E-gU0luVn-y0CbmsJ28JzmJK4CC0Ov1lEenIdID2w3pukVtd5inJU5E4XeWuJX9e9-3dQcCl9rZCsciob7ZxnnxEICWLMaShb601PLYD29qS7Pzti4EzgWRk-is8X89c4RQ:1oHe2r:zm9hs929LOH2mn9brI-mYs5HEUqvYNAyi8hHKfkgIrM|2022-08-13 13:25:45.486662
sqlite>

Google Chrome の user_b もログアウトしてデータベースを検索すると,すべてのセッション情報が削除さていることが確認できました.

sqlite> select * from django_session; ⏎
sqlite> .exit ⏎

(base) C:\Users\lecture\Documents\django\django_comment_auth>

目次に戻る