http.cookies --- HTTP quản lý nhà nước¶
Source code: Lib/http/cookies.py
Mô-đun http.cookies xác định các lớp để trừu tượng hóa khái niệm cookie, một cơ chế quản lý trạng thái HTTP. Nó hỗ trợ cả cookie chỉ chuỗi đơn giản và cung cấp tính trừu tượng để có bất kỳ loại dữ liệu có thể tuần tự hóa nào làm giá trị cookie.
Mô-đun này trước đây áp dụng nghiêm ngặt các quy tắc phân tích cú pháp được mô tả trong thông số kỹ thuật RFC 2109 và RFC 2068. Kể từ đó, người ta phát hiện ra rằng MSIE 3.0x đã không tuân theo các quy tắc ký tự được nêu trong các thông số kỹ thuật đó; nhiều trình duyệt và máy chủ hiện nay cũng đã nới lỏng các quy tắc phân tích cú pháp khi xử lý cookie. Kết quả là mô-đun này hiện sử dụng các quy tắc phân tích cú pháp ít nghiêm ngặt hơn trước đây một chút.
Bộ ký tự, string.ascii_letters, string.digits và !#$%&'*+-.^_`|~: biểu thị tập hợp các ký tự hợp lệ được mô-đun này cho phép trong tên cookie (dưới dạng key).
Thay đổi trong phiên bản 3.3: Được phép ':' làm ký tự tên cookie hợp lệ.
Ghi chú
Khi gặp cookie không hợp lệ, CookieError sẽ được nâng lên, vì vậy nếu dữ liệu cookie của bạn đến từ trình duyệt, bạn phải luôn chuẩn bị cho dữ liệu không hợp lệ và phát hiện CookieError khi phân tích cú pháp.
- exception http.cookies.CookieError¶
Ngoại lệ không thành công do RFC 2109 không hợp lệ: thuộc tính không chính xác, tiêu đề Set-Cookie không chính xác, v.v.
- class http.cookies.BaseCookie([input])¶
Lớp này là một đối tượng giống như từ điển có khóa là chuỗi và có giá trị là các thể hiện
Morsel. Lưu ý rằng khi đặt khóa thành giá trị, giá trị đầu tiên sẽ được chuyển đổi thànhMorselchứa khóa và giá trị.Nếu input được đưa ra, nó sẽ được chuyển tới phương thức
load().
- class http.cookies.SimpleCookie([input])¶
Lớp này bắt nguồn từ
BaseCookievà ghi đèvalue_decode()vàvalue_encode().SimpleCookiehỗ trợ các chuỗi dưới dạng giá trị cookie. Khi đặt giá trị,SimpleCookiegọistr()dựng sẵn để chuyển đổi giá trị thành chuỗi. Các giá trị nhận được từ HTTP được giữ dưới dạng chuỗi.
Xem thêm
- Mô-đun
http.cookiejar xử lý cookie HTTP cho web clients. Các mô-đun
http.cookiejarvàhttp.cookieskhông phụ thuộc vào nhau.- RFC 2109 - HTTP Cơ chế quản lý nhà nước
Đây là đặc tả quản lý trạng thái được triển khai bởi mô-đun này.
Đối tượng cookie¶
- BaseCookie.value_decode(val)¶
Trả về một bộ
(real_value, coded_value)từ một chuỗi biểu diễn.real_valuecó thể là bất kỳ loại nào. Phương thức này không giải mã được trongBaseCookie--- nó tồn tại nên có thể bị ghi đè.
- BaseCookie.value_encode(val)¶
Trả về một bộ
(real_value, coded_value). val có thể là bất kỳ loại nào, nhưngcoded_valuesẽ luôn được chuyển đổi thành chuỗi. Phương thức này không mã hóa trongBaseCookie--- nó tồn tại nên có thể bị ghi đè.Nói chung, trường hợp
value_encode()vàvalue_decode()nghịch đảo trong phạm vi của value_decode.
- BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\r\n')¶
Trả về một chuỗi biểu diễn phù hợp để gửi dưới dạng tiêu đề HTTP. attrs và header được gửi tới phương thức
output()của mỗiMorsel. sep được sử dụng để nối các tiêu đề lại với nhau và theo mặc định là tổ hợp'\r\n'(CRLF).
Đồ vật nhỏ¶
- class http.cookies.Morsel¶
Tóm tắt một cặp khóa/giá trị, có một số thuộc tính RFC 2109.
Morsels là các đối tượng giống như từ điển, có bộ khóa không đổi --- các thuộc tính RFC 2109 hợp lệ, đó là:
Thuộc tính
httponlychỉ định rằng cookie chỉ được truyền trong các yêu cầu HTTP và không thể truy cập được thông qua JavaScript. Điều này nhằm mục đích giảm thiểu một số hình thức kịch bản chéo trang.Thuộc tính
samesitekiểm soát thời điểm trình duyệt gửi cookie với các yêu cầu trên nhiều trang web. Điều này giúp giảm thiểu các cuộc tấn công CSRF. Các giá trị hợp lệ là "Nghiêm ngặt" (chỉ được gửi với các yêu cầu trên cùng một trang web), "Lỏng lẻo" (được gửi với các yêu cầu trên cùng một trang web và điều hướng cấp cao nhất) và "Không" (được gửi với các yêu cầu trên cùng một trang web và giữa các trang web). Khi sử dụng "Không", thuộc tính "bảo mật" cũng phải được đặt theo yêu cầu của các trình duyệt hiện đại.Thuộc tính
partitionedcho tác nhân người dùng biết rằng các cookie chéo trang should này chỉ khả dụng trong cùng ngữ cảnh cấp cao nhất mà cookie được đặt lần đầu tiên. Để tác nhân người dùng chấp nhận điều này, bạn must cũng đặtSecure.Ngoài ra, bạn nên sử dụng tiền tố
__Hostkhi đặt cookie được phân vùng để khiến chúng được liên kết với tên máy chủ chứ không phải miền có thể đăng ký. Đọc CHIPS (Cookies Having Independent Partitioned State) để biết đầy đủ chi tiết và ví dụ.Các khóa không phân biệt chữ hoa chữ thường và giá trị mặc định của chúng là
''.Thay đổi trong phiên bản 3.7: Các thuộc tính
key,valuevàcoded_valueở chế độ chỉ đọc. Sử dụngset()để cài đặt chúng.Thay đổi trong phiên bản 3.8: Đã thêm hỗ trợ cho thuộc tính
samesite.Thay đổi trong phiên bản 3.14: Đã thêm hỗ trợ cho thuộc tính
partitioned.
- Morsel.value¶
Giá trị của cookie.
- Morsel.coded_value¶
Giá trị được mã hóa của cookie --- đây là giá trị sẽ được gửi.
- Morsel.key¶
Tên của bánh quy.
- Morsel.set(key, value, coded_value)¶
Đặt thuộc tính key, value và coded_value.
- Morsel.output(attrs=None, header='Set-Cookie:')¶
Trả về một chuỗi biểu diễn Morsel, phù hợp để gửi dưới dạng tiêu đề HTTP. Theo mặc định, tất cả các thuộc tính đều được bao gồm, trừ khi attrs được cung cấp, trong trường hợp đó nó phải là danh sách các thuộc tính sẽ sử dụng. header theo mặc định là
"Set-Cookie:".
- Morsel.js_output(attrs=None)¶
Trả về một đoạn mã JavaScript có thể nhúng, nếu chạy trên trình duyệt hỗ trợ JavaScript, đoạn mã này sẽ hoạt động giống như khi tiêu đề HTTP được gửi.
Ý nghĩa của attrs cũng giống như
output().
- Morsel.OutputString(attrs=None)¶
Trả về một chuỗi đại diện cho Morsel mà không có bất kỳ HTTP hoặc JavaScript nào xung quanh.
Ý nghĩa của attrs cũng giống như
output().
- Morsel.update(values)¶
Cập nhật các giá trị trong từ điển Morsel với các giá trị trong từ điển values. Phát sinh lỗi nếu bất kỳ khóa nào trong lệnh values không phải là thuộc tính RFC 2109 hợp lệ.
Thay đổi trong phiên bản 3.5: một lỗi được đưa ra đối với các khóa không hợp lệ.
- Morsel.copy(value)¶
Trả về một bản sao nông của đối tượng Morsel.
Thay đổi trong phiên bản 3.5: trả về một đối tượng Morsel thay vì một lệnh.
- Morsel.setdefault(key, value=None)¶
Phát sinh lỗi nếu khóa không phải là thuộc tính RFC 2109 hợp lệ, nếu không thì hoạt động giống như
dict.setdefault().
Ví dụ¶
Ví dụ sau đây minh họa cách sử dụng mô-đun http.cookies.
>>> từ cookie nhập http
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["đường"] = "bánh xốp"
>>> in(C) tiêu đề # generate HTTP
Set-Cookie: fig=newton
Set-Cookie: đường=bánh xốp
>>> print(C.output()) điều # same
Set-Cookie: fig=newton
Set-Cookie: đường=bánh xốp
>>> C = cookies.SimpleCookie()
>>> C["đá"] = "đường"
>>> C["rocky"]["path"] = "/cookie"
>>> print(C.output(header="Cookie:"))
Bánh quy: đá=đường; Đường dẫn=/cookie
>>> print(C.output(attrs=[], header="Cookie:"))
Bánh quy: đá=con đường
>>> C = cookies.SimpleCookie()
>>> C.load("chips=ahoy; vienna=finger") # load từ một chuỗi (tiêu đề HTTP)
>>> in(C)
Set-Cookie: chip=ahoy
Set-Cookie: vienna=ngón tay
>>> C = cookies.SimpleCookie()
>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=;";')
>>> in(C)
Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=;"
>>> C = cookies.SimpleCookie()
>>> C["oreo"] = "thứ đôi"
>>> C["oreo"]["path"] = "/"
>>> in(C)
Set-Cookie: oreo=doublestuff; Đường dẫn=/
>>> C = cookies.SimpleCookie()
>>> C["twix"] = "không có gì cho bạn"
>>> C["twix"].giá trị
'không có gì cho bạn'
>>> C = cookies.SimpleCookie()
>>> C["số"] = 7 # equivalent đến C["số"] = str(7)
>>> C["chuỗi"] = "bảy"
>>> C["số"].giá trị
'7'
>>> C["chuỗi"].giá trị
'bảy'
>>> in(C)
Đặt-Cookie: số=7
Set-Cookie: string=seven