Djangoのセッション技術(クッキー、セッション、トークン)

A、クッキー

クライアント技術は、ブラウザにデータ情報を格納し、辞書構造は、即ち、キー値、構造体に格納されています。

クッキーサーバが作成されますが、クライアントに保存され、クライアントが(クッキーがリクエストヘッダ情報の一部であるため)クッキーがサーバに情報を送信するたびに要求を送信します

クッキーは、クロスブラウザ、クロスドメインができないことができない、中国をサポートしていません。

1、クッキーを設定します

HttpResponse.set_cookie()

response.set_signed_cookie( "クッキー名称"、 "クッキー值"、塩= "盐")

  プロパティ:キー

     値

     最大エージング有効期間、秒単位で、100秒が自動的にNoneを無期限に設定期限切れ後にブラウザが100の実効値として(デフォルトでは)失敗した0の場合は無効として指定されています

     10日に代表される有効期限が切れ、日時の有効期限が切れるか、サポートはtimedeltaは、特定の日時を指定することができます=はtimedelta(日= 10)が期限切れ

     最大エージングと指定された2つのxepires

通常の設定、クリアテキストの表示
DEF ますsetcookie(要求):
    レスポンス =のHttpResponse(' 配置されたCOOKIE成功' 
    response.set_cookie(' 名前'' エゴン' の戻り応答
塩の設定は、暗号化された形式で表示
DEF (要求を)do_login:

    のuname = request.POST.get(' のuname ' 

    レスポンス = HttpResponseRedirect(リバース(' アプリケーション:鉱山' )) 

    response.set_cookie( 'のuname'、 uname、max_ageの= 60) 
    response.set_signed_cookie(' コンテンツ'、のuname、" ロック" 

    の戻り応答

2、GET

HttpRequest.COOKIES.get(キー) 

request.get_signed_cookie( "クッキー名称"、塩= "盐")

デフgetcookie(リクエスト):
     リターンはHttpResponse(request.COOKIES.get(' 名前'))
デフ鉱山(リクエスト): 

    のuname = request.COOKIES.get( "コンテンツ")

    してみてください

        のuname = request.get_signed_cookie(" コンテンツ"、塩= " ロック" 

        場合は、uname:
            リターンのHttpResponse(のuname)

            リターンがレンダリング(リクエスト、' mine.html ' = {コンテキスト" のuname " )のuname}
     以外Eとして例外:
         印刷" 获取失败" 

    戻りリダイレクト(逆('アプリ:ログイン"))

3、削除

response.delete_cookie(キー)

デフログアウト(リクエスト):

    応答 =リダイレクト(逆(" アプリ:ログイン" ))

    response.delete_cookie(" コンテンツ" 

    の戻り応答

二、セッション

セッションは、ユーザとサーバの「セッション」を示すために使用されます。サーバーと一致セッションID(クッキーの存在下で)クライアントのセッションIDを使用して送信され、クライアントの要求は、多くの場合、ログイン認証に使用するあなたの「セッション」を、見つけることができます。

セッションは、通常、変更を保存したい場合は道のデフォルトのデータベースセッションのセッションの保存を使用すると、Djangoにメモリに保存されている、我々は、セッション中のRedisに保存することができますSESSION_ENGINE構成情報を追加する必要があります。

図1に示すように、データ・ストレージ

 HttpRequest.session [キー] =値、BASE64符号化するデータ

2、読み出しデータ

request.session.session_key获取SESSION_ID

HttpRequest.session.get(キー)  

3、削除セッション

デルますrequest.session [ "キー"]

request.session.flushは()クッキーとセッションをクリア

request.session.clear()すべてのセッションをクリアします

DEF :(リクエスト)ログイン
     であれば request.method == " GET " リターンレンダリング(リクエスト、' two_login.html ' のelif request.method == " POST " 
        ユーザ名 = request.POST.get(" ユーザ名" 
        要求を.session [ " ユーザ名" ] = ユーザ名が
         返さのHttpResponse(" 登录成功" 


DEF 鉱山(要求):
    ユーザ名= request.session.get(" ユーザ名" プリント(request.session.session_key)
     リターンがレンダリング(リクエスト、' two_mine.html '、コンテキスト= 地元())


デフログアウト(リクエスト):
    応答 =リダイレクト(逆(" myappに:鉱山' ))
    デルますrequest.session ['ユーザ名'] 
    response.delete_cookie(' SESSIONID ') 
    セッションクッキー一起干掉
    request.session.flush()
     の戻り応答

4、セッション重要な構成

①、SESSION_EXPIRE_AT_BROWSER_CLOSE =真 

   ブラウザが閉じられた、クリアローカルクッキー

②、SESSION_COOKIE_AGE = 60 

   設定した秒数がセッションを保存しました

5、拡張子:保存セッションのRedisへ

 ①インストールジャンゴ - Redisの-セッションライブラリー

ピップジャンゴ -  Redisの-セッションをインストール

②構成でsettings.py

SESSION_ENGINE = ' redis_sessions.session ' 
SESSION_REDIS = {
     ' ホスト''127.0.0.1 ' ' ポート':6379 ' DB ' :0、
     ' パスワード'' Redisの密码' ' 接頭辞'" キー前缀" ' SOCKET_TIMEOUT ':5     
}

 三、Token

トークンが生成された欠点サーバセッションテクノロジ(サーバーのリソース)を補うために、思考のトークンの検証は、「宇宙のための時間。」

最初の認証は、(ユーザー名とパスワードが正しい)成功すると、サーバーのユーザーデータは、署名トークンを生成するために、トークンは、クライアント、クライアントが要求を送信すると、サーバーにトークンを運ぶでしょう、サーバに送信されます認証が成功した認証トークンを、復号化し、ユーザ認証すること。そうでない場合、検証は失敗します。

1、使用

モバイル端末又はクライアントの開発に使用することが、一般的にそれ自体のトークンを格納する、移動端末のニーズJSON形式で送信、トークンは、トークンがアクティブ通過するとき、関連するデータを取得する必要があります

 

 

おすすめ

転載: www.cnblogs.com/huiyichanmian/p/12168685.html