- 締切済み
クッキーのタイミング
PHPのクッキーは、ブラウザにContent-type:のようなものが届く前にクッキー命令が届く必要がありましたが、Perlではそういった決まりはないのですか? <body> が出力される前に print "Set-Cookie: ~"; すると、bodyのbgcolorがむこうになったりしますよね? print "Set-Cookie: ~";によってbodyが出力済みと解釈されるためだと思います。 できればPHPのように <HTML>を出力する以前に print "Set-Cookie: ~"; したいのですが、よい方法はありませんか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- bgbg
- ベストアンサー率53% (94/175)
モジュールを使っていないのなら自前でContent-type等を出力していると思いますが、基本的にはContent-typeを出力する前にSet-Cookieしてやれば大丈夫です。 print "Set-cookie: foo=bar\n"; print "Content-type: text/html\n\n"; ただ、質問者さんのCookie周りの理解が頓珍漢な感じですので、今一度HTTPの仕組みについて再学習されたほうがいいでしょう。特にリクエスト/レスポンスヘッダあたりを重点的に。
- jjon-com
- ベストアンサー率61% (1599/2592)
Webサーバ→Webクライアント 方向のデータをHTTPレスポンスと言います。 (1) "Set-Cookie: " 文は HTTPレスポンスのヘッダ部で出力し, (2) ヘッダとボディの区切りとして1つの空行 "\n" を出力した後, (3) "<html><body>" などのHTMLを HTTPレスポンスのボディ部で出力する, というのは HTTPの仕様ですから, PHPだろうが Perlだろうが 他のどんなプログラム言語で書こうが, 「<HTML>を出力する以前に print "Set-Cookie: ~";」せねばなりません。 http://www.rfs.jp/sb/perl/03/03.html > <body> が出力される前に > print "Set-Cookie: ~"; > すると、bodyのbgcolorが無効になったりしますよね? というのは,質問者が Perlの use CGI; の機能を理解しないで使っており,"Set-Cookie:"文をHTTPボディ部で出力している可能性が考えられます。 http://www.hidekik.com/cookbook/p2h.cgi?id=cookie1 CGI.pm を使用せず,HTTPヘッダもHTTPボディも自分でprint出力してみるとよく理解できると思います。 http://www.hidekik.com/cookbook/p2h.cgi?id=cookie2
補足
useに依存したくないのでuseは使っていません。