A、クッキーとセッションプレゼンテーション
HTTPクッキーが原因を保持することはできませんhttpプロトコルが、実際には、契約の範囲に属していないが、我々は「ホールド」する必要があるため、クッキーはこのようなシナリオの下に生まれています。
クッキーがされワークス:サーバーから生成されたコンテンツは、ブラウザがローカルに保存された要求を受け取る;「であるサーバは、クッキーの内容によって判断することができるように、ブラウザの訪問は、ブラウザが自動的に、クッキーを持って来るときは誰「。
クッキーがある程度解決しますが、要件を「ホールド」が、クッキー自体は4096バイトまでサポートし、クライアント自体に保存されたクッキーのために、傍受または盗難することができるので、何か新しいものが必要とされて、それをより多くのバイトをサポートする、と彼は、サーバー上に保存され、高いセキュリティがあります。それはセッションです。
質問は「誰が。」サーバは、訪問者を知らない、ステートレスなHTTPプロトコルの特性に基づいて、あります そして、上記のクッキーは、ブリッジの役割を果たします。
私たちは、ユーザーがクッキーを介してアクセスするようにユニークなIDクッキーは、各クライアントを割り当てる与えることができ、サーバは、人々に知っています「」その後、我々、このような「アカウントのパスワード」としてクッキーに基づいて異なるID、しばらくの間、サーバーに保存された個人情報、など。
要約すると:クッキーは、ステートレスHTTPの不足を補うため、サーバが「」人々に知っているように、しかし、テキスト形式のクッキーがローカルに保存され、彼らのセキュリティが貧弱であり、私たちはクッキーによって異なるユーザを識別することができ、セッションで4096バイトより個人情報及びテキストの保存に対応します。
また、上述のクッキーとセッション共通点は、実際には、言語やフレームワークに限定されるものではないものです
ログインアプリケーションの第二に、原則
はじめに前のセクションでは、我々は、背景ページにジャンプするためのユーザー名とパスワードの正しさを確認した後、ランディングページを作ることができました。しかし、テストはまた、もしバイパスログインページを見つけました。直接入力背景URLアドレスも直接アクセスすることができます。これは明らかに不合理です。実際には、我々は不足しているクッキーと検証とのセッションです。この検証プロセスでは、我々は達成することができますし、他のWebサイトでは、バック・ページを入力するにはログインする必要があります。
私は認証機構のこの種についてお話しましょう。私たちは、ランディングページにアクセスするためにブラウザを使用するたびに、一度私たちは、認証を通過してきました。サーバーがブラウザにユニークな文字列(123ABCとする)のランダムなセットを送信し、クッキーはブラウザ側と呼ばれているものの中に保存されています。そして、サーバは次のようハハハ、ログイン= trueの場合、ユーザ名=ユーザ情報として、利用者の自身の現在の状態に関する保存されます。しかし、このメモリは辞書の形式で保存されている、唯一の重要な問題の辞書はユーザーのだけユニークなクッキーの値です。あなたは、サーバー側のセッション情報を表示するのであれば、それから、理論的には、次のような以下の辞書を見て表示されます
{ '123ABC' { 'ログイン':真、 'ユーザ名:笑'}}
各クッキーは一意であるので、我々はあなたのコンピュータ上のブラウザを変更してから、ウェブサイトで着陸も再検証する必要があるため。では、なぜ私たちは、理論的に言って、この辞書のようにそれを見ていますか?そのため、大きな辞書がないだけで上記のキーは、値を123ABC値を暗号化されているためということで、安全性を考慮すると値{「ログイン」:trueの場合、「ユーザ名:ハハハ」}サーバー側では、暗号化と同じです。だから我々は、セッション情報も似て次のようなものを見ても、サーバー上で開きます
{ '123ABC':dasdasdasd1231231da1231231}
第三に、クッキーの簡単な使用
クッキーを取得:取得に値がある場合、ノーリターンなしが存在しない場合
ヴァル= request.COOKIES.get(' ユーザ'、'' )
設定されたCookie:
有効期限が切れる:有効期限、日付と時刻タイプ
パス:有効なパスは、クッキーの設定は、このパスとサブパスに作用します
max_ageの:有効期限(秒)
応答=(リダイレクト' /インデックス/ ' ) #のresponse.set_cookie( 'is_login'、真の、max_ageの= 15)#max_age是以秒计算的、不支持すなわち 日付 = datetime.date(年= 2020、月= 12、日= 31 ) response.set_cookie(' ユーザ'、user_ret.name満了=日付、パス= ' /インデックス/ ')
クッキーを削除します。
response.delete_cookie(' ユーザー'、" user_ret.name)
3つのベースのログイン認証要求処理:
3つの要求の合計は
注意:アクションは、パスのフォームまたは/ログイン/の形取っ
URL:ます:http://127.0.0.1:8080最初のリクエスト /ログインのGET 要求
の第2の要求:URLます。http://127.0。 0.1:8080 /ログインPOSTリクエストユーザーPWD
第三の要求:URL:のhttp://127.0.0.1:8080 /インデックスGETを運ぶクッキーの要求
、これは指数であるため、インデックスページには、クッキーになりますクッキーがありました
注意:あなたは、検証に成功し、リターン応答指数はGETリクエストにジャンプすると、POSTフォームリクエストフォーム1回、2回、要求を完了するために、[送信]をクリックしたときに
認証コードをログイン:
views.py
django.shortcuts インポート、レンダリングのHttpResponse、リダイレクト から app01.models インポート * インポート日時 、インポート 時 #ここにあなたの意見を作成します。 デフログイン(リクエスト): もし request.method == ' POST ' : プリント(' 我の是ポスト请求' ) ユーザー = request.POST.get(' ユーザー'、'' ) PWD = request.POST.get(" passwdの") user_ret = Userinfo.objects.filter(=ユーザー名、= PWD PWD)1次回() 印刷(' ユーザー名:' 、ユーザー) 印刷(user_ret) IF user_ret: レスポンス =リダイレクト(' /インデックス/ ' ) #のレスポンス。 set_cookie( 'is_login'、真の、 max_ageの= 15)#max_age IEのサポートされていない、秒単位である response.set_cookie(' is_login '、TRUE) #max_ageのは秒であるが、それはIEのサポートしていません (DATE = datetime.dateを= 2020年、月12は=、= 31日目です) response.set_cookie("ユーザー'user_ret.name、有効期限= DATE、パス= ' /インデックス/ ')#の #のresponse.set_cookie()が 返すレスポンスを 、他: 返すのHttpResponseを(' ログインに失敗しました" ) を印刷(" 私は要求を取得するには" ) を返す (レンダリングリクエスト、' login.htmlと' ) DEFのインデックス(要求): 印刷(' 要求タイプ:' 、request.method) is_login = request.COOKIES.get("is_login ' ) のIF is_login: #ログインが成功した後、ユーザー設定のクッキー削除し たユーザ名は= request.COOKIES.get(' ユーザー' ) ' '' 最後のショー: 1.は、Last_time最後を削除し、そうでない場合はヌル 2、ログイン時間を提供login_date 。3、Last_time設定ログ '' ' 最後 = request.COOKIES.get(' Last_time ' ' ') #1 login_date time.strftime =(' %Y-%を%D%X-M- '、time.localtime()) #2 応答=(レンダリング要求、' index.htmlを'、{ ' ユーザ名':ユーザ名、' logindate ' :最後}) response.set_cookie(' last_time '、login_date) #3 リターン応答 他: 戻りリダイレクト(' /ログイン/ ' ) #1 リターンレンダリング(リクエスト'index.htmlを')
login.htmlと
<!DOCTYPE HTML > < HTML LANG = "ZH" > < 頭> < メタ文字コード= "UTF-8" > < タイトル>クッキー设置</ タイトル> </ ヘッド> < 身体> < フォームアクション= "" メソッド= "ポスト" > {%csrf_token%} 用户名< 入力タイプ=" text」の名= "ユーザ" >= "パスワード" 名前= "passwdの" > < 入力タイプ= "提出" > </ フォーム> </ ボディ> </ HTML >
index.htmlを
<!DOCTYPE HTML > < HTML LANG = "EN" > < 頭> < メタ文字コード= "UTF-8" > < タイトル>インデックス</ タイトル> </ ヘッド> < 身体> < H1 >こんにちは、{{ユーザー名}} < / H1 > < H2 >上次登录时间:{{logindate}} </ H2 > </ ボディ> </ HTML >