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"]でアクセスしているのに、なぜユーザー毎に別々で管理できるのでしょうか?
初歩的な質問かもしれませんがよろしくお願いします。

回答1件
あなたの回答
tips
プレビュー