ログイン認証Cookieやセッションの実現

こうしたクライアントのクッキー情報と協力する必要が格納され、ログイン時に達成するためにセッション・サーバに格納されたログイン機能を作るとして回答技術。具体的には、ユーザーのクッキー情報に保存されている特殊なトークン情報、ユーザーがサイトにアクセスするための特別なトークンを保持している場合、サイトは、セッションかどうかを確認するために、データベースへのクッキーからこの特別なトークンを取得しますこの情報は、検証が失敗した場合、ユーザーがログインしてそうプロンプトされていないよう求められ、認証が成功した場合、あなたはクライアントにユーザーの情報の背中を置くことができ、トークン対応しています。

HTTPクッキーが原因を保持することはできませんhttpプロトコルが、実際には、契約の範囲に属していないが、我々は「ホールド」に必要なので、クッキーは、このようなAシナリオの下に生まれています。

作品クッキーです:サーバーから生成されたコンテンツは、ブラウザがローカルに保存された要求を受信、ブラウザの訪問は、ブラウザが自動的にクッキーを持って来るとき、そのサーバは、クッキーの内容によって判断できること「です「A。

クッキーは、「保留」の要件、ある程度解決しますが、クッキー自体が原因では4096バイトまでサポートし、クライアント自体に保存されたクッキーは、傍受または盗難することができるので、何か新しいものの必要性は、それが、あるがより多くのバイトをサポートする、と彼は、サーバー上に保存され、高いセキュリティがあります。それはセッションです。

ステートレスのHTTPプロトコルの特性に基づいている質問、サーバーが訪問者を知らない「誰が。」そして、上記のクッキーは、ブリッジの役割を果たします。

そのユーザーがクッキーを介してアクセスして私たちは、各クライアントの割り当てのユニークなIDクッキーを与えることができ、サーバは、人々に知っています「」その後、我々のIDなど、「アカウントのパスワード」としてクッキーに基づいて異なる、いくつかの時間のためにサーバーに保存された個人情報、など。

要約すると:クッキーは、HTTPステートレスの不足を補う「」人にサーバーを知ることができるように、しかし、テキスト形式のクッキーがローカルに保存され、彼らのセキュリティが貧弱であり、私たちはクッキーによって異なるユーザを識別することができますので、セッションで4096バイトより個人情報及びテキストの保存に対応します。

また、上記のクッキーとセッション共通点は、言語やフレームワークに限定されるものではない何かが実際にあります

####

HTTPプロトコルはステートレスです。そのため、他の手段を用いた場合、リモートサーバーとクライアントが通信を行っていたものを前に知ることができません。クッキーはの一つである「他の手段。」クッキーA一般的なアプリケーションのシナリオは、サイトにログインしているユーザーを記録するために使用されます。

成功したユーザーがログインした後、次のサーバは、(通常は暗号化された)クッキーファイルを送信します。クライアント(通常はWebブラウザ)は、受信したファイルのCookieを保存します。クッキーを送信するために、サーバーへの次回のクライアントが接続するには、サーバはその意味を確認し、サーバーにファイル(再度ログインを避けるために)記録さリストア。

#####

1.1説明
答えは技術的なブラウザ
自体は、ブラウザによって生成されたクッキーは、ブラウザの応答によって書かれたクッキーは、次の訪問は、ブラウザのクッキーは異なるルールに従って引き継がれます

#####

1.2クッキーの方法
设置:response.set_cookie(キー、値、max_ageの=なし、exprise =なし)

取得:request.GET.get(キー)

删除:request.delete_cookie(キー)

注:クッキーは、ブラウザを越えることはできません

パラメータの定義:

max_ageのとexprise時間:

max_ageの:秒で、クッキーの有効期限を指定する整数

exprise:有効期限を指定する整数、また日時やはtimedeltaをサポートしている、あなたは、特定の日時を指定することができます

セットには、10日後に期限切れ:

exprise = datetime.datetime.now()+はtimedelta(日= 10)、10日に期限切れ

有効期限が切れることはありません。

Noneにexpriseセットが期限切れにならないことを示しています

####

2.セッション

#####

2.1説明
クッキーに応じて、サーバーの技術セッション、

#####

2.2オープンセッションの設定

SESSIONを有効ジャンゴ1)

代わりに以下の設定を変更します。

INSTALLED_APPS:
'django.contrib.sessions'

ミドルウェア:
'django.contrib.sessions.middleware.SessionMiddleware'

各オブジェクトは、セッションのHttpResponseプロパティを持っている辞書ライクオブジェクトであります

#####

2.3一般的な操作
ますrequest.session [「ユーザー」] =ユーザ名のデータを設定します

request.session.get(キー、デフォルト=なし)がに従い、セッションキーの値を取得します

request.session.flush()django.contrib.auth.logout()関数は、それと呼ばれ、現在のセッションデータを削除し、セッションクッキーを削除します。

request.session.session_keyは勝った大きな列の  クッキーのログイン認証とセッションの実現をセッションID値をとります

現在のセッションのすべてのユーザーデータを削除するrequest.session.delete(request.session.session_key)

デルますrequest.session [「キー」]はセッションキー値を削除します

request.session.set_expiry(値)
値が整数である場合、セッションは秒のいくつかの数の後に期限切れとなる
値がdatatimeかはtimedeltaであれば、セッションがこの時間後に期限切れになります。
値が0の場合、ユーザーがブラウザセッションが失敗します閉じます。


データベースに格納されたデータは、Base64を使用して符号化することができます

3.ログイン認証セッション+クッキーを達成

ログイン認証方式のビューを作成します。1.
デフ (リクエスト)もし request.method == 'GET' リターン(要求、レンダリング 'login.htmlと'の場合 request.method == 'POST' 		ユーザ名= request.POST.get( 'ユーザ名'		パスワード= request.POST.get( 'パスワード'#2。校验数据完整性 		フラグ=全て([ユーザー名、パスワード])









IF ないで旗:
MSG = 「ユーザ名とパスワードを空にすることはできません」返しレンダリング(リクエスト、「login.htmlを」を、{ 「MSG」:MSG})#3.そのユーザ登録を確認する ユーザー= User.objects.filter(ユーザ名=ユーザ名)1次回()IF ないユーザー: MSG = 'アカウント登録し、登録されていない' を返すレンダリング(リクエストを、'login.htmlと' { 'MSG':MSG})#4パスコードIFユーザー。パスワード=パスワード:! MSGは= 'パスワードが正しくありません' を返すレンダリング(リクエスト、'login.htmlと'、{ 'MSG':MSG})+セッション#1の使用クッキーを













#セットクッキーの値は、セッションID #はdjango_sessionに格納されたテーブル値をSESSIONID ますrequest.session [なり「USER_ID」 ]がuser.id = リターン HttpResponseRedirect(リバース(「インデックスユーザー」))



適切なデコレータを作成します。2.
DEF  login_required (FUNC) DEFのcheck_login (要求)試してみるセッションID#検証クッキーの値が存在し、対応するレコード情報#django_session認証サーバのテーブルがある場合、現在値が設定値を取得している場合#のUSER_ID 			ますrequest.sessionを[作ります 'USER_ID' ]を除く例外 AS E:リターン HttpResponseRedirect(リバース( 'ユーザ:ログイン'))戻り FUNC(リクエスト)










リターン check_login
3.キャンセルを達成するために

DEF ログアウト(リクエスト)もし request.method == 'GET' デルますrequest.session [ 'USER_ID' ]



リターンのHttpResponse(「ログアウト成功」

おすすめ

転載: www.cnblogs.com/lijianming180/p/12037965.html