• ベストアンサー

携帯電話のセッション管理

プログラミング初心者です。 現在、誰でも閲覧・利用できるようになっている携帯サイトを 会員制に移行させたいと思っております。 サイトやPerlで作成されている掲示板に 携帯電話のセッション管理の機能をつけられるようなプログラムなどありましたら教えてください。 もしなければその方法などをお教えいただけませんでしょうか? phpならばセッション管理が簡単にできるようですが perlで作成されている掲示板には使用できないので困っております。 どうかよろしくお願いいたします。

  • CGI
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CGI::Session を使えばいいと思います。 以下のサイトあたりが参考になると思います。 http://www.dab.hi-ho.ne.jp/sasa/biboroku/perl/session.html http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2FCGI%3A%3ASession%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB http://www.ksknet.net/cgi/cgisession.html 私のゴミみたいなテストプログラムも載せておきます。 #!/usr/bin/perl -T use warnings; use strict; use utf8; use CGI; use CGI::Carp qw(fatalsToBrowser); use CGI::Pretty; use CGI::Session; # 異なるipからのアクセスは認めない場合 # use CGI::Session qw/-ip_match/; # http://search.cpan.org/dist/CGI-Session/ # http://www.dab.hi-ho.ne.jp/sasa/biboroku/perl/session.html # http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2FCGI%3A%3ASession%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB # http://www.ksknet.net/cgi/cgisession.html use constant SESSION_DIR => '/tmp/session'; if ( ! -d SESSION_DIR ) { mkdir SESSION_DIR or die "$!"; } # Clean Session File CGI::Session->find( undef, \&purge, { Directory => SESSION_DIR } ) or die CGI::Session->errstr(); sub purge { my ($session) = @_; next if $session->is_empty; # already expired # Delete 1 hour old if ( ( $session->ctime + 3600 ) <= time() ) { $session->delete(); $session->flush(); } } my $q = CGI->new(); my ($login) = $q->param('login'); if ( defined $login ) { # Recv Form if ( $login eq 'login' ) { my ($user_name) = $q->param('user_name'); # Clean Old Session File CGI::Session->find( undef, sub { my ($session) = @_; next if $session->is_empty; # already expired # $user_name my ($session_user_name) = $session->param; if ( ( defined $session_user_name ) || ( defined $user_name ) || ( $session_user_name eq $user_name ) ) { $session->delete(); $session->flush(); } }, { Directory => SESSION_DIR } ) or die CGI::Session->errstr(); my $s = new CGI::Session( undef, $q, { Directory => SESSION_DIR } ); $s->expire('+1m'); # 1 Minute $s->param( -user_name => $user_name ); # set user_name print $s->header( -charset => 'UTF-8' ), $q->start_html(), $q->p( "New session! Session ID = ", $s->id ), create_login_form( $q, 'logout' ), $q->end_html; } elsif ( $login eq 'logout' ) { my $s = CGI::Session->load( undef, $q, { Directory => SESSION_DIR } ) or die CGI::Session->errstr(); $s->close; $s->delete; $s->flush; print $s->header( -charset => 'UTF-8' ), $q->start_html(), $q->p("Your session closed!"), create_login_form( $q, 'login' ), $q->end_html; } else { die "Unknown Form $login"; } } else { # Not Recv Form my $s = CGI::Session->load( undef, $q, { Directory => SESSION_DIR } ) or die CGI::Session->errstr(); if ( $s->is_expired ) { print $q->header( -charset => 'UTF-8' ), $q->start_html(), $q->p( "Your session timed out!. Session ID = ", $s->id ), create_login_form( $q, 'login' ), $q->end_html; } elsif ( $s->is_empty ) { print $q->header( -charset => 'UTF-8' ), $q->start_html(), $q->p("You don't have session!"), create_login_form( $q, 'login' ), $q->end_html; } else { my $sid = $s->id; my $s = new CGI::Session( undef, $sid, { Directory => SESSION_DIR } ); if ( $sid != $s->id ) { # Create New Session ID -> Unknown Session # Delete Temporary Session $s->close; $s->delete; print $q->header( -charset => 'UTF-8' ), $q->start_html(), $q->p( "Your session id don't match!. Session ID = ", $sid ), create_login_form( $q, 'login' ), $q->end_html; } else { print $q->header( -charset => 'UTF-8' ), $q->start_html(), $q->p( "Your session id match!. Session ID = ", $sid ), create_login_form( $q, 'logout' ), $q->end_html; } } } sub create_login_form() { my $q = shift || die "Require CGI object"; my $login = shift || 'login'; if ( ( $login ne 'login' ) && ( $login ne 'logout' ) ) { die "$login doesn't match login or logout"; return 0; } my $form = $q->start_form( -method => 'post', -action => $ENV{SCRIPT_NAME} ); if ( $login eq 'login' ) { $form .= $q->textfield( -name => 'user_name' ); } $form .= $q->submit( -name => 'login', -value => $login ) . $q->end_form; return $form; }

masa-25
質問者

お礼

お礼が遅くなってしまいまして、申し訳ございません。 このように大変ご親切にお教えくださり、ありがとうございます。 まだ初心者であることもあり、 これを理解しきれないのですが、 これを参考にさせていただき、 さらに勉強させていただきます。

関連するQ&A

  • セッション管理を携帯用とPC用

    セッション管理を携帯用とPC用で分けて作成しております。 携帯用では、ログイン後も、GETにセッションIDを付加しているので、自分のサイト内の他のURLにアクセスしても、セッションが引き継がれるのですが(2回目のsession_start()後OK) PC版の方がログインした後、セッションが他のURLに引き継がれません。(PHP PEARのAUTHを使用) 2回目のsession_start()後初期化されてしまうのですが、この問題は携帯と同じようにGETにセッションIDを付加するしか方法はないのでしょうか? セッション変数をグローバル変数に保持するなどは出来ないのでしょうか?

    • 締切済み
    • PHP
  • セッション管理について

    ひとつのWebサービスを複数サーバで運用していて、 データベースでセッション管理を行うと、データベース側に 負荷がかかってしまうため、memcacheを導入しセッション管理を しようと考えております。 (携帯サイトのためCoockieは使用できません) 1. memcacheとmemcachedの違いはなんでしょうか。  memcachedのほうが性能がいい、程度にしか認識していなかったのですが..   2.現在のWebサービスはPHP4.4.4で運用しており、PHP5に移行することは  リスクを考えると難しいです。。  memcacheはphp4.3.11、memcachedはphp5以降で利用可能であると  認識しているのですが、実際可能なのでしょうか?  社内の人間に聞くと、PHP5以降からしか対応していないと  言われ、迷っております。(また、対応バージョンについての文書も見つかりません。。)    テスト環境(php4.4.4)でmemcacheを入れ、PHPのmemcache関数を  使用したところ、通常にセッションの管理がされている気が  したのですが、複数サーバでロードバランスされているテスト環境が  なく、Webサーバが複数台ある場合の確認はできません。  実際、可能なのでしょうか。

    • 締切済み
    • PHP
  • DoCoMo FOMAでセッション管理が出来ない

    PHP初心者です。 携帯用サイトを作成中です。 DoCoMoのFOMAでセッションを使いページ間で値を保持したいのですが、セッションに代入した値が次ページに遷移すると値が消えてしまいます。 DoCoMo以外の携帯は問題なく出来ます。 セッション名等に制限があるのでしょうか? 説明不足だと思いますが、原因が全く分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • perlでのセッション管理を学びたい

    perlでのセッション管理を学びたいです。 わかりやすく解説されたサイトなどがありましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • セッションについて

    codeigniterで作成を試みているのですが、セッションについてよくわかりません。 DBを用いてセッションを管理しようとしています。 たとえば、会員テーブルを id(auto_increment)で順に登録が増えるとします。 同一セッションで会員のレコードを増えるのを避けたいと考えてセッションテーブルと会員テーブルの紐付けを行うのが必要と考えました。 このとき、セッションテーブルにidを登録するのがいいのでしょうか? それとも会員テーブルにセッションIDを登録するのがいいのでしょうか? 一般的にはどのような設計をするのでしょうか? 初心者ですので、教えてください。

    • ベストアンサー
    • PHP
  • セッション管理

    file1.html内でアップロードされた画像をabc.phpに送り、 そのabc.php内でfile1.htmlでアップロードされた画像の編集処理を行う プログラムを組みました。 編集処理には1分かかります。 ユーザAの画像を編集処理中の 編集処理時間1分間の間にユーザB、ユーザCがfile1.htmlでファイルをアップロードしabc.phpに処理を求めてきた時、 ユーザB、ユーザCのブラウザに対し 「あなたは1人目の処理待ちユーザです」 「あなたは2人目の処理待ちユーザです」 といったような順番待ち表示をセッション管理を応用して表示させたいです 。 下のセッション管理プログラムを応用して順番待ち表示を行なう事はできないでしょうか? 編集処理のプログラムは組めています。 <?php session_start(); if (!isset($_SESSION["visited"])){ print('0'); $_SESSION["visited"] = 1; $_SESSION["date"] = date('c'); }else{ $visited = $_SESSION["visited"]; $visited++; print($_SESSION["visited"]); $_SESSION["visited"] = $visited; $_SESSION["date"] = date('c'); } ?>

    • 締切済み
    • PHP
  • 携帯電話Web用 httpからhttpsに変えたときのSessionについて

    はじめまして。 携帯電話のWebサイトをphpにてただいま構築しています。 今回、初めて作っていますので、技術的なことをお聞きしたいと思います。 http://www~で始まるサイトから https://www~に変更をした場合(同一サーバー) http://www~で取得しているSessionが https://www~で有効になりません。 Sessionを有効にする方法がありましたら、 お教えください。 よろしくお願いします。

    • 締切済み
    • PHP
  • 携帯でセッションを使う

    携帯でセッションを使うのですが、通常であればセッションを使えるものと使えないものがあるので以下のようにしています。 <a href="next.php?<?=SID?>">次ページ</a> 要するにURLにセッションIDを付加してページ間移動しているのですが。 これだと http://xxx.jp/next.php?PHPSESSID=abcdefg とURLを直打ちすると セッションの中身をプログラム側で取得してしまうので それを回避したいのですがどのようにすればよろしいでしょうか?

    • 締切済み
    • PHP
  • 携帯で$_SESSION関数を利用する場合

    PHP初心者です。 質問内容や表現に過不足がありましたら、申し訳ございませんが、ご指摘下さい。 PHP4を利用し、携帯で閲覧可能なサイトを作ろうとしています。 a.phpからform上のボタンをクリックするとb.phpを呼ぶというプログラムを作りました。 PCでは動作しているのに、実機(i-modo)で確認するとどうしてもb.phpに移動してくれません。 どうやら$_SESSION関数に入れているデータが携帯の場合には消えてしまっているようなのです。 ソースは次のように組んでいて、途中、echoで表示して確認したところ、PCでは「1」と表示されるのに携帯では「」と何も表示されません。 次行のIF文にひっかかって、a.phpに戻ってしまっているようです。 最近の携帯では$_SESSION関数を利用できる、という話も見かけたのですが、使わずに作った方がよいのでしょうか? 回避策をご存知の方、ご教授頂けると助かります。 //------↓以下ソース例示------ a.php <?php ・・・・・・・・ session_cache_limiter('nocache'); session_start(); $_SESSION['c_flg'] = 1; ・・・・・・・・ <FORM action="b.php?SID" method="POST"> ・・・・・・・・ ?> b.php <?php ・・・・・・・・ session_start(); echo $_SESSION['c_flg'] ; //←ここで携帯の場合何も表示されない if ($_SESSION['c_flg'] != 1 ){ header("Location: http://" . $_SERVER["S"].dirname($_SERVER["R"]) . "/a.php/"); // ↑↑b.phpを直接呼ぶと必ずa.phpが表示されるようにしたい。↑↑ exit; } ・・・・・・・・ ?>

    • ベストアンサー
    • PHP
  • セッション管理は必要なのでしょうか?

    iアプリとDBサーバを利用した情報管理システムを考えています。DBはPostgreSQLの予定です。 サーバ側のプログラムはPerlを使って作るつもりです。 iアプリはHTTP通信を行うので、Apacheを立ててCGIでデータベース連携しようと思うのですが、セッション管理ということをしないといけないのか、しなくても良いのかというのが良く分かりません。 具体的には、一日の作業日報をアプリからサーバに送信したり、DB上のデータをダウンロードしたりするくらいのシステムです。 セッション管理は、どのような場合にどのような方法で行うべきものなのでしょうか? またどのような意味があるのでしょうか? かなり初心者レベルのあいまいな質問ですが、アドバイスいただけると助かります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう