質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2763閲覧

flaskのsessionを用いたログイン機能,セッションの仕組みについて

rm11_j

総合スコア4

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/27 08:20

https://ymgsapo.com/2019/09/21/flask-session/
上記のサイトのコピペです。

python

1from flask import Flask, render_template, session, request, redirect 2 3app = Flask(__name__) 4 5app.secret_key = "aaa" 6 7user_data = {} 8 9 10@app.route("/", methods=["GET"]) 11def index(): 12 if "flag" in session and session["flag"]: 13 msg = "hello,"+str(session["uid"]) 14 return render_template("index.html", 15 title="ログイン後の画面です", 16 message=msg) 17 else: 18 return redirect("/login") 19 20 21@app.route('/login', methods=['GET']) 22def login(): 23 return render_template("login.html", 24 title="ログインページ", 25 message="以下のフォームからログインしてね") 26 27 28@app.route('/login', methods=['POST']) 29def login_post(): 30 uid = request.form["uid"] 31 pwd = request.form["pwd"] 32 33 #ユーザが登録済みであった場合 34 if uid in user_data: 35 # IDとパスワードの組み合わせが合っていれば、ログイン済みにする 36 if user_data[uid] == pwd: 37 session["flag"] = True 38 # ログイン済みにしない 39 else: 40 session["flag"] = False 41 #ユーザが登録していなかった場合、登録してログイン済みにする 42 else: 43 user_data[uid] = pwd 44 session["flag"] = True 45 46 session["uid"] = uid 47 48 if session["flag"]: 49 return redirect("/") 50 else: 51 return render_template("login.html", 52 title="ログインページ", 53 message="パスワードが違います") 54 55 56@app.route('/logout') 57def logout(): 58 session.pop('uid', None) 59 session.pop("flag", None) 60 return redirect("/")

上記のコードは①ユーザーがid,pwを送信→ログイン完了、②session["flag"]=trueに変更、③以降のリクエストでsession(辞書)にflagキーがあるか、またvalueがtrueならばログインしている状態とするという流れだと思います。
そこで質問があります。
サーバー側のセッションの管理方法についてです。セッションというのはサーバー側に管理されている情報(cookieはブラウザ)だと認識しています。その場合、session["flag"]は、誰か一人のユーザーがログインしたらtrueになり、全てのユーザーが認証されてしまうのでは?と思いました。勿論実際そんなことはないと思うので、sessionというのはユーザー毎に固有のデータ(つまりユーザーAがログインして、session["flag"]はtrueになるが、それはあくまでユーザーAと紐づいたsession["flag"]がtrueということになりますが、sessionがサーバー側に保存された情報で、pythonのコードからもsession["flag"]でアクセスしているのに、なぜユーザー毎に別々で管理できるのでしょうか?
初歩的な質問かもしれませんがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/09/05 08:17

https://teratail.com/questions/341207 質問が放置されています。 解決したならベストアンサーを選んでください。 していないなら質問を編集して何を求めているのかを追記してください。
guest

回答1

0

ベストアンサー

まずは調べてみてください。公式ページにも session について記述があります。

https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions

This is implemented on top of cookies for you and signs the cookies cryptographically. What this means is that the user could look at the contents of your cookie but not modify it, unless they know the secret key used for signing.

投稿2021/08/27 08:29

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rm11_j

2021/08/27 09:13

ありがとうございます。読んでみました。 ブラウザのクッキーに保存されているが、キーで署名されているためデータ(session["flag"])はユーザーの手元にあるが修正ができないということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問