複数言語のクッキー利用に関して伺いたいです。

今回はPerlとJavaScriptで、Perlで保存しリンク先JavaScriptで利用したいです。
いろいろ試したのですが結局わけわからなくなり、ぜひ根本的な点に関しても教えて頂ければ助かります。
Perlにレベルを入れる変数$noがあり、これをクッキー保存しJavaScriptで同じく変数LevelSelectとして使用。
具体的にPerlゲームのレベルに合わせてその後飛ぶJavaScriptの方もゲームのレベルを自動設定する感じ。両方ともレベル設定に関しては変数=数字で既に入っているので。リンクからページを飛んだ先でクッキーにより自動入力される感じ。

以下の倉庫で参考にしたサイトとソースコード、改良したい元となるファイルを公開します。
文字数の関係でこの場で公開できずお許しください。削ってもリンク張れず、、
phpなど他の言語のクッキーにも関心はありますが(言語自体は学んだ)、今はそこまで余裕がないかなw
またクッキーでRead・Write、Set・Getの違いや逆パターンも教えて頂けると助かります。
どうぞよろしくお願いします。。

倉庫
http://flameroad.hp.infoseek.co.jp

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/02/03 06:10:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:angemaries No.1

回答回数80ベストアンサー獲得回数2

ポイント60pt

リンクでジャンプする先は別のサイトなのでしょうか?

異なるサイトではcookieは共有ができないはず。普通はしないし。

http://okwave.jp/qa/q35326.html

> リンクからページを飛んだ先でクッキーにより自動入力される感じ。

そうではなく、javascriptに埋め込みでcgiが返すか、javascriptでcookieから読み込むかの

どちらかをした上で、リクエストの際に変数もPOSTしてあげればいいように思いますが

どうなのでしょうか?

id:FREEz

回答ありがとうございます。同じドメイン内に置きます。

同じ階層に置いてもいいです。

直接perlとJavascriptを繋いでるわけではないので悩んでいるのですが、どちらが簡単なのでしょうか、、

クッキーならある程度設定してしまえば後で他のプログラムでも使えるかなと思ったのですが。

2010/01/28 12:31:34
  • id:Reiaru
    二日酔い & 面倒なので何ができないのかを確認していませんが、

    一度 HTML の hidden に入れてあれこれするのです。

    多分、何らかの元があってそれを改変したのであれば、Cookie の発行自体は成功しているでしょうし、
    取得する事まではできているのではないかと思います。

     ページ A で Perl によって何らかの値を計算させ、
     (どういうタイミングかは知りませんが) それを Cookie に書き出す。
            ↓
     ユーザーの操作によりページ B へ移動。
            ↓
     ページ読み込みと同時に Cookie を取得 (ここは JavaScript)
     このままではどうにもならないのでそれを Perl に渡す。
            ↓
     Perl がその値に応じて動的に HTML を生成する。

    みたいなお話ですよね?
    で、どの辺りができていないのかが良く分からなかったりします (実際に試していないので当然ですが)。

    ちなみにゲームという事ですが、Cookie でやる以外にも GET とか POST でごにょごにょする方法もありますよ。
    あまりお勧めはしませんけれど。
  • id:FREEz
    コメントありがとうございます。
    そんな感じですが、今回はPerlからJavaScriptです。
    どちらかというとGETやPOSTでやる方が自然なのも知っていますが、それも多言語間となるのでいっそクッキーの方が後々に楽だろうと考えたのです。
    そっちの方がセキュリティ上も好ましいのですけどね、、後々面倒です。
    正直、2つの言語間でやり取りするのにうまくいってない段階なので。
    片側だけの処理だったらそれぞれ出力してうまくいってたのだが、、
    ちなみにゲームとはいってもweb系の軽いプログラムです。
    そういえば今思い出したのですが、他に参考にしたサイトで
    そのままでは使えないから一度perlに戻すという感じに言ってたのもあったような。
    それ以上がわからなかったからどうしようもないのですが。
    逆パターンを付け足してPerlがHtml出力しないとダメなのでしょうかね、、
  • id:kn1967
    ヒントだけで、はてなを去るからコメントで・・・。

    現状では
    javascript => Times, Date, LevelSelect
    perl => RANDOM
    という名前でそれぞれバラバラ。

    perl のほうでもTimes, Date, LevelSelectの3つを取得したり、
    あるいは書き込んだりするようにコードを書き直せばいい。

    じゃぁ、また潜伏するから、あとはよろしくね => 二日酔いさん♪
  • id:FREEz
    コメントありがとうございました。
    実は、書き足していたのですが反応が悪いので間違いかと思って消してしまって、、
    エンコードとデコードのところが特にわからなくなって、おかしいかなと。
  • id:Reiaru
    えっ!
    また飲み始めてしまったのですが(笑)
    えっ! それよりも kn1967 様ー!
    はてなを去るって、それは困ります(/_<。)

    そ、それは質問には関係ないのでまた考えるとしまして、
    -------------------------------------
    私も Perl <--> JavaScript で Cookie を扱う際にあれこれ試行錯誤した覚えがあります。
    あれこれしたのはもう 2 年位前なのでよく覚えていないのですが、
    取りあえず Perl 部分のエンコード辺りのソースの例を貼ってみます。

    sub get_cookie {

      use Jcode;
      use CGI;

      $cookie_quest = "";
      $cookie_dungeon = "";

      @pairs = split(/\;/, $ENV{'HTTP_COOKIE'});

      foreach(split(/; /,$ENV{'HTTP_COOKIE'})){
        my($cookie_name,$value) = split(/=/);

        if ($cookie_name eq "quest"){
          #JavaScript で書かれた Cookie は Unicode なのでそれを S-JIS にする
          $cookie_quest = CGI::Util::unescape(CGI::Util::escape($query->param('by_escape')));
          $cookie_quest = &Jcode::convert($cookie_quest,"sjis", "utf8");
        }elsif($cookie_name eq "dungeon"){
          my $query = CGI->new('by_escape='.$value);
          $cookie_dungeon = CGI::Util::unescape(CGI::Util::escape($query->param('by_escape')));
          $cookie_dungeon = &Jcode::convert($cookie_dungeon,"sjis", "utf8");
        }
      }
    }
    -------------------------------------
    変数名から推測できるとは思いますが、これは実際に動いているゲームの一部か何かです(笑)
    if の部分は関係ありません。変に修正しておかしな事になるよりは動いてるままを貼った方が確実かと思いまして。

    私がこのコメントを書いているのですが、
    #JavaScript で書かれた Cookie は Unicode なのでそれを S-JIS にする

    恐らく挙動で悩むとすればこの辺りではないかと思うのです。
    そのゲームが S-JIS によるものなのか UTF-8 なのかという問題もあると思うのですが、上記は S-JIS で動作している場合の例です。

    (再度コメントを頂ければご相談には乗りますですよ~)
  • id:FREEz
    とりあえずこちらのperlの同部分を見てるのですが、sub Read_Cookie部分にJISに変換するのがありませんね。
    もともとソレ単体で完結して他に繋がらないから必要ないだけかもしれませんが。
    だからかな、コードの指定がない気がする、、記述が見られない。
    コード指定からしないと繋がらないのか、、なるほどソレは聞かないと気付かない、、
    sub Read_Cookieとsub get_cookieは名前の違いが何か違いますでしょうか。
    Read・Write、Get・Setの違いが微妙にわからないので。
    PerlとJavaScript、どちらをどのようにあわせるのかにもよりそうですねえ、、
    そもそもクッキー保存する際にひとつに決めておくべきなのかな。
    他のデータがどのようになってるかもありますものね、、

    ちなみに回答にして頂いていいですよ。関係が微妙でも。
    毎日見に来る予定ではありますがコメントって通知されないのでw
  • id:FREEz
    書き忘れてたので追記です。
    Jcode.pm というモジュールを使用すると、Unicode → シフトJIS, EUC, JIS などの変換ができる、とありましたがこれで共通にしないといけないのかな?
    逆に言うなら使用しないと変換できないということかもしれない、、
    Unicode同士だとダメなのでしょうかね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません