SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Perlで作るモバイルサイトのコツ

Perlで作るモバイルサイトのコツ:第6回

携帯端末でのセッション管理


  • このエントリーをはてなブックマークに追加

第6回は Webアプリケーションを作成する上で避けて通れない機能の一つ「セッション管理」を解説します。携帯では、PCのようにクッキーを利用できる端末は限られているため、画面遷移時にセッションIDを直接リクエストのパラメータに渡す方法で対応します。

  • このエントリーをはてなブックマークに追加

はじめに

 Webアプリケーションを作成する上で避けて通れない機能の一つにセッション管理があります。ユーザーが入力画面で入力した情報を、確認画面でセッションに保存し、完了画面を出力する前にセッションから復元してDBなどのストレージに格納する、というフローなどで使用されます。

 PC用のWebアプリケーションならば、クッキーを用いることでこのセッション管理を行うことができますが、現在の携帯の多くはクッキーを利用できないため、同様の処理を行うことはできません。

 そこで本稿では、携帯でのセッション管理の実装方法について解説していきます。

対象読者

  • CPANモジュールのインストールができる方。
  • PC用のWebアプリケーションでのセッション管理を理解している方。

必要な環境

  • Perl 5.8以上が動作するサーバ(筆者環境ではPerl 5.8.8)。
  • Apache 1.3系、2.x系が動作するサーバ(筆者環境ではApache 2.2)。
  • MySQLが動作するサーバ(筆者環境ではMySQL 5.0.27)。

今回使用したCPANモジュール

  • CGI 3.25
  • CGI::Session 4.20
  • HTML::SticyQuery 0.12
  • Template 2.15

サンプルアプリケーションのディレクトリ構成

 今回用意したサンプルアプリケーションのディレクトリ構成は次のようになっています。

 「index.cgi」がメインのアプリケーションです。「template」にはアプリケーションで使用するテンプレートが置かれています。「misc」以下にある「session.sql」は今回のサンプルアプリケーションで使用しているセッション格納用のテーブル定義です。

サンプルアプリケーションのディレクトリ構成
/ +- index.cgi
  +- template +- confirm.tt
  |           +- finish.tt
  |           +- index.tt
  |           +- input.tt
  |
  +- misc     +- session.sql

 本稿ではこのサンプルアプリケーションを例に実装内容を紹介しますので、説明と合わせてご覧ください。

携帯でセッションを管理する

 セッション管理は、ユーザーからのリクエストごとに一意のID(セッションID)を発行し、常にそのIDをリクエストに含ませることで行います。PCであればクッキーを使用してセッションIDをブラウザに保持しておくことができますが、前述したとおり携帯ではクッキーを使用できる端末が限られるため、画面遷移時にセッションIDを直接リクエストのパラメータとして渡す必要があります。

 パラメータを引き継ぐ必要のある遷移のパターンは以下の3つです。

  1. リンクによる遷移
  2. フォームによる遷移
  3. リダイレクトによる遷移

 では、この3つの遷移について、具体的にどのように実装するのかサンプルソースを例に見ていきましょう。

リンクによる遷移

 リンクによる遷移では、aタグのhref属性にセッションIDを付加する必要があります。この処理はHTML::StickyQueryを利用すると簡単です。サンプルソースでは sticky_session_id()という関数内でその処理を行っています。今回はセッションIDのキーを「session_id」として付加しています。

## セッションIDを href に付加する
my $stq = HTML::StickyQuery->new;
return $stq->sticky(
    scalarref => \$args{output},
    param     => {session_id => $args{session_id}},
);

 このようにすることでhref属性に「&session_id=**************(*はセッションID)」というパラメータが付加されます。

 これでリンクによる遷移時にセッションを維持できるようになりました。

フォームによる遷移

 フォームで遷移する場合はフォームタグ内にhiddenでセッションIDを送るためのinputタグを埋め込みます。その処理を行っているのがサンプルのhidden_session_id()という関数です。

 画面表示前にHTMLを解析し、HTML内のフォーム内にinputタグを埋め込んでいます。

## セッションIDを hidden を使用して画面に埋め込む
$args{output} =~ s/(<form\s*.*?>)/$1\n<input type="hidden"
 name="session_id" value="$args{session_id}">/isg;

 これでフォームによる遷移時にもセッションを維持できるようになりました。

リダイレクトによる遷移

 最後がリダイレクトによる遷移です。

 リダイレクトする場合はリダイレクトするURLにセッションIDを付加する必要があります。サンプルではdo_exec()という関数内でその処理を行っています。

## リダイレクト先のURLにセッションIDを付加する
my $url = sprintf q{index.cgi?session_id=%s}, $session->id;
print $q->redirect( $url );

 以上で、リンク、フォーム、リダイレクトそれぞれでセッションを維持できるようになりました。

まとめ

 モバイル用のWebアプリケーションでのセッションを管理する方法を紹介させていただきました。

 今まで携帯でセッションを扱ったことのない方も、本稿を参考にしてちょっと凝ったWebアプリケーションを開発してみてはいかがでしょうか。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Perlで作るモバイルサイトのコツ連載記事一覧

もっと読む

この記事の著者

澤 知之(サワ トモユキ)

携帯電話でのインターネット利用がPCを初めて上回る--総務省調査そんなわけがない。携帯電話は画面もボタンも小さく操作性が悪いのに。これはモバイルがモバイルである以上、覆せない事実。そのアンチテーゼとして、株式会社ライブドア メディア事業部モバイルメディア部入社。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/896 2008/08/26 13:42

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング