2017-08-08 17 views
0

Webツールを開発中で、Cookieの設定に問題があります。私は20年前にこれをPerlで使っていましたが、2017年にPythonでクッキーを処理するための明確でクリーンな方法がないように思われました。私は簡単で素早くなると思ったことは一日中終わった。私はクッキーを手動で設定し、要求モジュールを使用して実験し、Stack Overflowで見つけた多数の部分的なコード例を試しました。私が見たどこにいても、ドキュメンテーションは貧弱で、完全な実例はなく、答えは古いものです。Python cgiでブラウザのCookieを設定する際の問題

私はPythonでcgiスクリプトを作成しています。スクリプトのログインページでは、テキストボックスと選択メニューをWebページに表示するためにprint "Content-type: text/html\r\n"があります。ユーザーがsubmitをクリックすると、エラーがある場合にページに何かを印刷する必要がある検証ステップがあります。エラーがなければ、新しいページを読み込んでクッキーを設定するスクリプトが必要です。

#!C:\Python27\python.exe -u 

    import Cookie 
    c = Cookie.SimpleCookie() 
    c['id'] = '12345' 
    c['score'] = '8.76' 
    c['page'] = '3' 
    print "Content-type: text/html %s;\r\n" % (c) 
    print "" 
    print c 

問題は、次のとおりです:私がチェックしたときに

  1. は2つだけ上に示した3つのC値のは、「クッキーとして保存されます。ここ

    は私が私のクッキーを設定するために使用していたコードです上記のコードを単独で実行した後、Firefoxに「Cookieを表示」します。

  2. 私は、スクリプトに載っているページの上部にContent-type: text/html Set-Cookie: score=8.76 Set-Cookie: id=12345 Set-Cookie: page=3 ;と表示しています。これは、クッキーにprint文を設定し、Content-typeを再度送信したためです。この場合、ブラウザにはクッキーは保存されません。 Cookieは、ヘッダにまだContent-type: text/htmlがない場合にのみ格納されます。

Content-type: text/htmlの別のコピーをブラウザに印刷せずにスクリプト内からクッキーを設定する方法はありますか?

また、ユーザーがツール内を移動したときにクッキーを無意識に更新する方法も必要です。たとえば、次のページをクリックすると、Cookieは次のページ番号に更新されます。

私はWindows 10でPython 2.7を使用していますが、私のテストブラウザとしてFirefoxを使用しています。

答えて

0

私は両方の問題を解決することができました。

問題#1:上記の3つのc値のうち2つだけがクッキーとして保存されています。

解決策:1つのクッキーに3つの値を渡すようにクッキーを設定します。たとえば、次のように

import Cookie 
c = Cookie.SimpleCookie() 
c['id'] = '12345|score=8.76|page=3' 

# Output the HTTP message containing the cookie BEFORE Content-type text/html! 
print c 
print "Content-type: text/html\r\n" 

問題#2:ウェブページの出力に追加Content-type: text/htmlヘッダー:

策:サーバーがブラウザからのGETやPOSTイベントに応答するたびに、クッキーをする必要があります設定http応答で起きる最初のこと。私は、これが常に正しいことを確認するためにスクリプトで使用されているロジックを並べ替える必要がありました。すべてのhttp応答では、クッキーが処理されるまで、何もブラウザにはContent-type: text/htmlを介して何も印刷されません。

関連する問題