トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BBS-雑談掲示板/222

ページの作成や編集にはユーザ登録が必要です。

 Cookieで複数の値をセットするケースでお薦めなのは? - ZON (2007年01月23日 13時30分33秒)

ども、プラグイン投稿で何度かプラグイン作成を行っているZONです。

サポートと雑談のどちらにしようか迷ってから「正解の無い投げかけだから」という理由で雑談の方に書き込んでいます。

現在私は今までのものよりは比較的大きなプラグインを作成している所なのですが、その中で Cookie を使おうとして件名のような疑問を抱きました。調べた所、Cookieには『サイズの制限』と『サーバーの発行個数の制限』があるようですね。

Cookieとしてセットしたい値が10個ある場合、それぞれnameをつけてセットすると、読み込みの扱いは大変楽ですが、個数の制限を消費してしまいます。(また、大量のCookieを嫌う人もいますよね)

一方で @配列変数で格納すると、順番で判断して取り出すことになるので人為ミスが起きそうな感じが心配です。(順序を変更した場合も全体をチェックする必要が出ますし)

それから、古くからある方法で、任意の区切りをつけて値を連結するというテクニックでは個数分以上の切り出し用変数を用意する必要があるようなので、もっとうまい方法が無いかと悩みます。(そのルーチンだけで10も20も変数を使うと「いいんだろうか」というもったいない気持ちになります)

さて。いま作成中のプラグインについては、扱いの簡単な「それぞれ名前をつけて発行」という方法で問題なく動いていますが、おそらくこれだと環境が違う場合にエラーを起こしそうです。

Cookieの取り扱いについて、作る面から、使う面から、どんな方針がありますでしょうか?

考えを聞かせていただければと思います。

  • Cookie技術は開発された当初の使い方だと、手軽な反面、情報漏洩などが懸念され、そこから「セッション」という技術が誕生しました。セッションは、Cookieのやりとりを行うのだけど、サーバー側で発生させた時限付きのIDだけ、Cookieのやりとりをし、大きなデータ(または大事なデータ)はキャッシュファイルなどのサーバー側に保存する手法です。更に最低でもMD5といった暗号化技術を併用することで、第三者に情報取得されにくいものになっています。が、「手軽に使うのにセッションまでは…」とか、「ブラウザに渡しても問題の無い、さほど重要ではない情報なら発行するIDも重要でない」というのであれば、Perl内で任意のIDを決めてCookie発行すると、サーバー側に大きな情報を保存できます。セッションを使ってみる良い機会かも:) - A_M (2007年01月23日 16時49分43秒)

Session で設計

ZONです。ご意見ありがとうございます。

なるほど、セッション技術はそういう目的(それ以上ですね)のものであったのですね。これは気づきませんでした。おかげでまた一つ「なるほど」という部分が広がったのを感じます。手元の手引に使っている本にはセッションについてはほとんど記載がありませんでしたが、以前にオブジェクト指向についての本を市立図書館から借りたときにはセッションについてのページがあったのを記憶しています。「ここに繋がるのか」という感覚でしょうか。

さて、大層な事を企んでいる訳ではなくて、これまで別CGI(perl)に頼っていた「アンケート(職場)」と「日誌」と「掲示板(コミュニケーション目的)」をプラグインとして作ろうとしています。(いずれもごく狭い範囲が対象です)……その際、よくBBSで「いくつかの値はクッキーで保存され、自動的に入力されます」という機能を実現したいというのが発端です。これらを作り上げる亊に関連しての事はこの場の主題ではありませんが、こういう目的に対してのセッションの設計を考えてみました。

  1. 入力内容のうちで保存したい値をハッシュの形式にする
  2. セッションIDの発行と値の格納
    • 格納先はDBではなくてファイル(./log や ./config またはユニークなディレクトリ)
  1. セッションIDをクッキーにして有効期限つきで発行
    • 有効期限は30分とか、その年度中(20xx年3月31日)などが考えられます
  1. 【一定の時間の経過】
  2. クッキーを使ってセッションIDを取得
    • 有効期限切れなら新規と同じ動作……期限切れの値はこの時点で削除した方がいいのかな?
    • 有効期限内なら値の取り出しの動作
  1. 取り出した値をスクリプトで使用する
    • 使用済みの値は新たに入力された値の保存の時点で用が無くなるのでここでも削除した方がよいのかな?
  1. 使用者からの入力を受け取り、最初に戻る

……かなり大雑把な感じもしますが私の今の理解だとこんな感じになりました。

値の削除が新たな疑問として浮かびましたが、スクリプトを実際に書きながらタイミングをつかもうと思います。

指摘ありましたら、ぜひどうぞ。(2007年01月26日 昼ごろ)

  • 「セッションを使う良い機会」などと言っては見たものの、FSWikiが管理するセッションは、管理画面上で設定した「セッションタイムアウト」で強制的にサーバ上のファイルを削除する仕様です。あくまでもログイン認証の目的で、Wikiページが表示される毎に、サーバ側のセッションファイルをタイムスタンプで判断して削除するコア仕様。このため、最も手軽な方法を用いるのであれば、Cookieに保存するのは、ユニークなIDで、特定されにくいキャッシュファイル名でも良さそうに思います。 - A_M (2007年01月26日 18時09分36秒)
お名前: コメント:

最終更新時間:2007年01月26日 18時09分36秒