ホームページ  >  記事  >  バックエンド開発  >  PythonのCookie処理について詳しく解説

PythonのCookie処理について詳しく解説

WBOY
WBOYオリジナル
2016-06-16 08:45:251377ブラウズ

ユーザーのブラウザに Cookie をインストールするために、HTTP サーバーは次のような HTTP ヘッダーを HTTP 応答に追加します。

コードをコピー コードは次のとおりです:

Set-Cookie: session=8345234;expires=Sun, 11 月 15 日-2013 15 :00:00 GMT; path=/;domain=baidu.com

expires は Cookie のライフサイクル、path は Cookie の有効なパス、ドメインは有効なCookie のドメイン。

パス「path」は、Cookie を読み取ることができる最上位のディレクトリを設定するために使用されます。

Cookie のパスを Web ページの最上位ディレクトリに設定し、そのディレクトリ内のすべての Web ページが Cookie にアクセスできるようにします。

方法: Cookie に path=/ を追加します。「food」ディレクトリ内の Web ページのみでこの Cookie を使用する場合は、path=/food; を追加します。

ドメイン: 一部の Web サイトには小さなドメイン名が多数あります。たとえば、Baidu には「news.baidu.com」、「zhidao.baidu.com」、および「v.baidu.com」というドメイン名の下に Web ページがある場合があります。 。

「baidu.com」の下にあるすべてのマシンが Cookie を読めるようにしたい場合は、Cookie に「domain=.baidu.com」を追加する必要があります。

ユーザーのブラウザは有効期限が切れるまで Cookie を保存し、ブラウザはパスとドメインに一致する次のような HTTP リクエスト ヘッダーをサーバーに送信します:

Copyコード コードは次のとおりです:

Cookie: session=8345234。

たとえば、www.baidu.com にログインする場合、Baidu サーバーから返される HTTP 応答ヘッダー内の Cookie は次のとおりです:

コードをコピーします コードは次のとおりです:

Set-Cookie:H_PS_PSSID=4681_4567_1452_9876_4759; path=/; baidu.com
Set-Cookie:BDSVRTM=74; path=/

ブラウザの HTTP リクエストヘッダー:

コードをコピー コードは次のとおりです:

Cookie:BAIDUID=0FD996SDFG12********107B9C227F4C: FG=1;bdshare_firstime=1384567418140;H_PS_LC=4_shadu2014; 7_1452_9876_4 759

ブラウザが Cookie を HTTP サーバーに送り返すとき、key=value 文字列のエンコード形式が使用され、有効期限、パス、ドメインなどのオプションの属性は返されません。

Cookie 文字列は通常、HTTP_COOKIE 環境変数にあり、次のように読み取ることができます:

コードをコピー コードは次のとおりです:

import os
print "Content-type: text/plainn"
if "HTTP_COOKIE" in os.environ:
print os.environ["HTTP_COOKIE"]
else:
print "HTTP_COOKIE not set!"

Python の Cookie モジュール (python2、python3 では http.cookies) は、特別な辞書のようなオブジェクト SimpleCookie を提供します。これは、Morsel と呼ばれる Cookie 値のコレクションを保存および管理します。

各 Morsel には、名前、値、およびオプションの属性 (有効期限、パス、ドメイン、コメント、最大保存期間、安全性、バージョン、httponly) があります。

SimpleCookie は、output() メソッドを使用して HTTP ヘッダーの形式で Cookie データ出力を作成し、js_output() メソッドを使用して JavaScript コードを含む文字列を生成できます。

HTTP_COOKIE を使用して Cookie を生成します:

コードをコピー コードは次のとおりです:

cookie=Cookie.SimpleCookie(os.environ['HTTP_COOKIE'])
print cookie.output()

クッキーを設定:

コードをコピー コードは次のとおりです:

import Cookie
import datetime
import Random

有効期限 = datetime.datetime.now() + datetime.timedelta(days=30)
cookie = Cookie.SimpleCookie()
cookie["session"] =random.randint(1,1000000000)
cookie ["session"]["domain"] = ".baidu.com"
cookie["session"]["path"] = "/"
cookie["session"]["期限切れ"] = Expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST")

print "Content-type: text/plain"
print cookie.output ()
print
print "Cookie セット: " + cookie.output()

出力:

コードをコピー コードは次のとおりです:

コンテンツ タイプ: text/plain
Set-Cookie : session=155209565; Domain=.jayconrod.com; 有効期限=2014 年 3 月 3 日月曜日 07:42:47 PST; Set-Cookie: session=155209565; =.jayconrod .com; 有効期限=2014 年 3 月 3 日月曜日 07:42:47 PST;

Python の cookielib ライブラリ (python3 では http.cookiejar) は、Cookie の保存と管理のためのクライアント側のサポートを提供します。

このモジュールの主な機能は、Cookie を保存できるオブジェクトを提供することです。このモジュールを使用して Cookie をキャプチャし、後続の接続リクエストで再送信することもできます

Cookie データを含むファイルを処理します。

このモジュールは主に、CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar のオブジェクトを提供します。

CookieJar オブジェクトはメモリに保存されます。

コードをコピー コードは次のとおりです:

>>> インポート urllib2
>>> cookie=cookielib.CookieJar()
>>> handler=urllib2.HTTPCookieProcessor(cookie)
>>> opener=urllib2.build_opener(handler)
>>> ')

Google にアクセスするための Cookie がキャプチャされました。
どのようになるかを見てみましょう:


コードをコピーしますコードは次のとおりです:
>> > 印刷 Cookie
]>

Cookie インスタンスのコレクションであるようです。Cookie インスタンスには、名前、値、パス、有効期限などの属性があります。

コードをコピー コードは次のとおりです:
>>> Cookie:
。 .. print ck.name,':',ck.value
...
NID : 67=B6YQoEIEjcqDj-adada_WmNYl_JvADsDEDchFTMtAgERTgRjK452ko6gr9G0Q5p9h1vlmHpCR56XCrWwg1pv6iqhZnaVlnwoeM-L n7kIUWi92l- X2fvUqgwDnN3qowDW
PREF : ID=7ae0fa51234ce2b1:FF=0:NW=1 :TM= 1391219446:LM=1391219446:S=cFiZ5X8ts9NY3cmk

Cookie をファイルにキャプチャすることもできます。
FileCookieJar(ファイル名)

FileCookieJar インスタンスを作成し、Cookie 情報を取得して、その情報をファイルに保存します。filename はファイル名です。

MozillaCookieJar(ファイル名)

Mozilla cookies.txt ファイルと互換性のある FileCookieJar インスタンスを作成します。

LWPCookieJar(ファイル名)

libwww-perl Set-Cookie3 ファイルと互換性のある FileCookieJar インスタンスを作成します。

コード:

コードをコピー コードは次のとおりです:
import urllib2
import cookielib
def HandleCookie():
#ファイルの Cookie を処理します
filename='FileCookieJar.txt'
url='http://www.google.com.hk'
FileCookieJar=cookielib.LWPCookieJar(filename)
FileCookeJar.save ()
opener =urllib2.build_opener(urllib2.HTTPCookieProcessor(FileCookieJar))
opener.open(url)
FileCookieJar.save()
print open(filename).read()
#ファイルから cookie を読み取ります
readfilename = "readFileCookieJar.txt"
MozillaCookieJarFile =cookielib.MozillaCookieJar(readfilename)
print MozillaCookieJarFile
MozillaCookieJarFile.load(cookieFilenameMozilla )
print MozillaCookieJarFile
if __name__ ==="__main__":
HandleCookie()

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。