1.cookie
HTTPプロトコルはステートレスであり、サーバーは異なるユーザーを区別できないため、Cookieは1993年に発明されました。実際、Cookieは、実際にはユーザーのブラウザに保存されている小さなテキスト情報です。
クッキーにはおそらく次の特徴があります
- キーと値のペアの形式で情報を保存します
- ドメイン名のセキュリティに基づいて、異なるドメイン名のCookieは相互にアクセスできません
- 対応するドメイン名が配置されているサーバーへの現在の要求に自動的に従います
1.1クッキーを設定する
Djangoでは、HttpResponseオブジェクトのset_cookie()メソッドを使用してCookieを設定できます
# 创建响应对象
response = HttpResponse()
# 使用响应对象设置Cookie
response.set_cookie(key, value, max_age=36000)
上記のmax_ageパラメータは有効期間を設定します。単位は秒、デフォルトはNoneで、一時的に有効です。
class BooksView(View):
def get(self, request):
# 返回一个字典
contents = {
"title": "红楼梦",
"read": "100",
"others": [
"人民教育出版社", "发行信息", "版权所有"
]
}
# 获取一个response对象
response = render(request, 'books.html', contents)
# 设置一个临时cookie
response.set_cookie('name', 'admin', max_age=None)
return response
1.2クッキーを削除する
ブラウザがCookieを使用してリクエストを開始すると、サーバーでCookieを読み取ることができます
class BooksView(View):
def get(self, request):
...
# 取出浏览器发送过来的cookie
name = request.COOKIES.get("name")
print('获取到的cookie:', name)
...
return response
2.セッション
一般的に、重要な情報はフロントエンドで確認できるため、Cookieには保存しません。機密情報の場合、漏洩しやすいですが、セッションであるサーバー側に保存できます。
セッションメカニズム
クライアントがリクエストを開始すると、サーバーはランダムキー(session_key)を使用してユーザー情報を保存し、対応する値(session_data)はユーザー情報であり、このキーをクライアントに送信します。クライアントのCookie。次にクライアントがCookieを使用してサーバーにアクセスすると、サーバーはCookieに基づいて対応するユーザー情報を取得します。
セッションの特徴
- 機密情報を公開しないでください
- Cookieよりも多くのコンテンツを保存できます
- 依存関係とCookie
- セッション共有、セッションはクラスター全体で均一に管理できます
2.1セッションの設定
HttpRequest()オブジェクトのセッション属性を介して設定できます
request.session['key'] = value
前のビュー機能でセッションを設定し続けます
class BooksView(View):
def get(self, request):
...
# 通过HttpRequest对象设置session
request.session['name'] = 'admin'
return response
ページを更新すると、応答ヘッダーが返される前に設定されたCookieに加えて、sessionidの文字列が表示されることがわかります。
2.2セッションの読み取り
セッションの読み取りは、Cookieによって使用される操作オブジェクトがすべてHttpResponse()であり、セッションがHttpRequest()であることを除いて、Cookieの読み取りと同じです。
class BooksView(View):
def get(self, request):
...
# 通过HttpRequest对象设置session
request.session['name'] = 'admin'
# 读取Session
name = request.session.get('name')
print('session: ', name)
return response
さらに、Djangoはセッションをデータベースに保存しますが、対応する値は暗号化されます
2.3セッションの他の操作
セッションの主な操作は設定と読み取りであり、理解すべき他の操作があります
清除所有Session,在存储中删除值部分
request.session.clear()
清除session数据,在存储中删除session的整条数据
request.session.flush()
删除session中的指定键及值,在存储中只删除某个键及对应的值
del request.session['key']
设置session的有效期
request.session.set_expiry(value)