Djangoのクッキー和セッション

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 >
コードの表示

 

おすすめ

転載: www.cnblogs.com/lovepy3/p/10978787.html
おすすめ