• 締切済み

cookieを介さずにCGI/PerlとセッションIDを遣り取りする方

cookieを介さずにCGI/PerlとセッションIDを遣り取りする方法 Adobe AIR HTML/Ajax で cookieを介さずにサーバーのCGI/PerlとセッションIDを遣り取りする方法について、何か情報ありませんでしょうか。 AIRはcookieをOSと共有するようなのですが、既定ブラウザがFirefoxの場合、共有できません。 幸い、AIRはローカルでのファイル操作が可能なので、自前でセッションIDの遣り取りと管理をさせたいと考えております。 で、以下の様にしてみましたが、nullが返ってくるだけでした。 PerlのセッションID発行はCGI::Sessionを使用しています。 [code] var cgi_url = 'http://server_name/cgi/session.pl'; var login_name = 'hoge'; var login_auth = 'fuga'; var msg = $.ajax( { type :'POST', url :cgi_url, data :'login_name=' + login_name + '&login_auth=' + login_auth }).responseText; alert(msg); [/code]

  • AJAX
  • 回答数2
  • ありがとう数21

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

ちゃんとコードを読むと、POSTって書いてますね。失礼しました。 URLに付記すると、GETになってしまいますね。 以下の記事内容に関連した事が原因でPOST送信になっていないのかも知れませんね。 http://livedocs.adobe.com/flex/3_jp/langref/flash/net/URLRequestMethod.html 『メモ:Adobe AIR で実行中のコンテンツの場合、 で navigateToURL() 関数を使用すると、ランタイムでは、POST メソッドを使用する URLRequest(method プロパティが URLRequestMethod.POST に設定されているもの)は、GET メソッドとして処理されます。』 では、navigateToURLを使わない別の方法はあるのか?と調べていると、以下のような記事が見つかりました。 http://journal.mycom.co.jp/series/air/013/index.html

blue-horse
質問者

お礼

BellBell様 お礼遅くなりまして申し訳ございません。 ありがとうございす。 たびたび回答を頂いているのに大変申し訳ないのですが、Flex開発はまだ手が出ずにおります。 おそらくAIRAliases.js経由で実現可能な内容だと思われるので、調べてみようと思います。 ちなみに、nullが返ってくる問題ですが、どうやらPOST送信のdataパラメータの記述の仕方を間違えていた様で、以下の記述でCGIリクエストの結果を受け取れました。 【JavaScript】 var cgi_url = 'http://server_name/cgi/session.pl'; var login_name = 'hoge'; var login_auth = 'fuga'; var result_html = $.ajax( { type :'POST', url :cgi_url, data : // ここの記述が間違っていました { 'login_name':login_name, 'login_auth':login_auth }, dataTyle:'html' }).responseText; あとはレスポンスヘッダをjQueryで処理できれば文句なしなのですが。 JavaScriptのgetResponseHeaderだとブラウザ判別が面倒で。 (まあ、AIR だからSafari(Webkit)だけ気にすればよいのですが)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

あくまで、cookieを使わない前提で考えると、URLに引数をつけてやりとりをすればよいかと。 CGI/Perlについては無知ですが、CGI/Perlで携帯用のサイトを作れるからには、cookieを使わないセッションを管理できる機能は持っているハズ。 PHPからの類推ですが、cookieが使用できない携帯端末ではURLにセッションIDを付加して維持しているに違いないと考えられます。 それではその、cookieを使わないセッションを管理できる機能とは、という点が判らないのが、CGI/Perlについて無知なところでお役に立てませんが。 Perlで携帯サイトを作るには?というあたりを調べれば、おそらく必要な情報が入手できると思います。(cookieを使えない環境でのセッション管理の方法)

blue-horse
質問者

お礼

BellBell様 回答ありがとうございます。 説明不足で申し訳ございません。 セッションIDはPOSTメソッドで遣り取りしたいので、「URLに引数として付記する方法」は出来れば避けたいところなのです。

関連するQ&A

  • PerlモジュールのCGI::Sessionでセッション管理

    PerlモジュールのCGI::Sessionでセッション管理をしようとしています。 具体的なコードは %cookie=raw_fetch CGI::Cookie; $S_id=$cookie{'S_id'};#クッキーに保存されたセッションIDを取得 $session = new CGI::Session("driver:MySQL", "$S_id", {Handle=>$dbh}); その後 $Ses_id=$session->id(); とすると本来ならばクッキーに保存された既存のセッションID($S_id)が$Ses_idに入ると思うのですが、$Ses_idには新しいセッションIDが入ってしまいます。 そこで疑問なのですが (1)$S_idにクッキーに保存されたセッションIDを指定すると既存のセッションをオープンするのではないのでしょうか? (2)$Ses_id=$session->id();にはなぜ新しいセッションIDが入ってしまうのでしょうか? 2点の質問ですが、どうか宜しく教えてくださいまし。

  • perlにおけるセッションIDについて

    sessionIDがページを更新するたびに変わってしまいます。 その結果、前回セッションに保存した値を読み込めません。 my $cgi = new CGI; CGI::Session->name("SESSION_ID"); my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'}); print $session->header(-charset=>'UTF-8'); print $session->id(); print $session->param("name"); #表示されず。 というようにしてセッションIDを表示すると、毎回変化します。 どうしたらIDを変わらないように出来るでしょうか? ちなみに、セッションに書き込むのは、 my $cgi = new CGI; CGI::Session->name("SESSION_ID"); my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'}); $session->header(-charset=>'UTF-8'); $session->param("name", "abc"); $session->flush(); undef($session); こんな処理をしてます。

    • ベストアンサー
    • Perl
  • sessionとcookieの設定内容の区別

    セッションとクッキーの使い分け方法を教えていただけないでしょうか? 簡単に言えばセッションがサーバサイド、クッキーがクライアントサイド、 セッション内容はブラウザ切れば消える(残すことも出来る)、クッキーはブラウザに残る、 と言うことは分かっているのですが、実装の仕方が分かりません。 例えばログインフォームでは$_SESSION['name']、$_SESSION['password']を回す・・・というのは分かります。 認証が終われば$_SESSION['name']、$_SESSION['password']は破棄して$_SESSION['login']=TRUE等を使うのではないかと思っております。 (そうではなくて、認証後は全て$_COOKIEで処理するのでしょうか?) で、$_COOKIEにはsessionIDが入っていると。 しかしながら、ブラウザ切っても暫くしてまたサイトを訪れたときにログイン状態が続くようにするにはどのようにすればいいのでしょうか? $_COOKIEにその情報を格納するのだと思うのですが、例えば$_COOKIE内にユーザidやlogin=OKのような文字を入れているとブラウザから見えてしまいます。 勿論ハッシュ化をして簡単には把握できないでしょうが、ここにはどんな情報が格納されているのか見当も付きません。 具体的な$_SESSION、$_COOKIEに入れるものと、サイトでの各々の実装法を教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • Perl cookie 削除か書込

    Perl cookie cookie→NAMEというクッキーデータを 削除か、まったく別のものに書き換えたいのですが、どうすればいいのでしょうか? 現在はJavaScriptで書き込んでいるのですが、 <script> \$(function(){ \$('#NAME).val(\$.cookie("NAME")); \$("#Login").click(function(){ \$.cookie("NAME",\$('#NAME).attr('value'), { expires: 365 }); location.href="$MYURL" }) }) </script> Perl ソース中で、PerlでこのNAMEを消したい 瞬間があります。 もしくは、書き換えたいです。 やりかたを教えて下さい。 調べてはいるものの うまくいきません。

  • どうしてもCookieとCGI・perlの関係?が理解できない。

    ととろさんのところを(http://tohoho.wakusei.ne.jp/www.htm)みながら、なんとかPerl・CGIを勉強しているところです。 普通にフォームに入力されたものをログファイルにとる、などはできるようになったのですが、 どうしてもクッキーのところでつまづいてしまいます。 Cookie書き込みの例、のところに、 Set-Cookie: NAME=tanaka; Fri, 31-Dec-2030 23:59:59; とやったら、tanakaというクッキーが作成されるのでしょうか? どうしてもこの辺がわからないのです。 これを実行する場合、 #!/usr/local/bin/perl print "Content-type:text/html\n"; print "Set-Cookie: NAME=tanaka; Fri, 31-Dec-2030 23:59:59;" print "\n"; のようにやるのですか? 最終的にはフォームの入力値を取得・反映したいと考えているのですが…。 あちこちわかりやすいと言われるcgi・PERL解説サイトをみたのですが、どうしてもここだけが理解できませんでした。

    • ベストアンサー
    • CGI
  • CGI::Sessionの使い方

    CGI::Sessionなどを使ったことがない初心者です。 どの端末から掲示板に投稿されたか識別するだけのために (セッションの画面遷移は不要) PerlのCGI::Sessionを使ってセッションIDを発行し、 CGI内のセッション記録用ファイルにいつどの端末から投稿されたか記録したいと思っています。 そこでCGI::Sessionについて調べてみたのですが my $session = new CGI::Session("driver:MySQL", $cgi, {Directory=>'./session'}); データーベースはMySQLでなければいけないのでしょうか? My SQLではなく例えばディレクトリ内のdate/session-date.textなどに記録し、 扱いことはできないのでしょうか? またそのような場合にはどのように記述するのか教えてください!

    • ベストアンサー
    • Perl
  • セッションIDの取得方法

    <?php session_start(); echo 'start session:' . $_COOKIE[session_name()]; これを実行すると、初回のみセッションIDが取得できず空となってしまいます。 どうすると初回からセッションIDを取得できるんでしたでしょうか? ご教示下さい。

    • ベストアンサー
    • PHP
  • phpのsessionとcookieについて

    質問は以下に2つです。 プログラムの説明は、pass,idから認証を行い、sessionidを発行します。二度目の以降はsessioidから認証します。 sidpost.phpからpostでIDとパスワードを入力させます。 データベースはid, pass, sidの3つのカラムがあります。 <?PHP require_once'DB.php'; session_name("sid"); session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $id = $_POST['id']; $pass =$_POST['pass']; $cookie = $_COOKIE['sid']; $sid = session_id(); //データベース参照 //プレースホルダーを使用 //id からpassを参照する //cookie から sidを参照する $data=$sth->fetchRow(DB_FETCHMODE_ASSOC);//参照したデータを$dataの連想配列に格納 //sid保存のプレースホルダー $sth2 = $dbh->prepare('UPDATE accountid SET sid=? WHERE id=? AND pass=?'); //cookieが保存されていない場合 if(!isset($cookie) && isset($pass) && isset($id)){ //idとpassから認証 if($pass === $data['pass']){ $sth2 = $dbh->execute($sth2, array($sid, $id, $pass)); echo "初めてのログインsid登録"; } //sidがある場合cookieとデータベースのsidを比較 }else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } //それ以外は入力フォームにリダイレクト }else{ header("location: ./sidpost.php?error=error"); } $dbh->disconnect(); ?> </body> </html> 上のようなセッション管理のプログラムを書きました。 質問は2つありまして、 ・1つめは、通常セッション管理を行う際の、条件はどのようにするのが一般的ですか? IDとパスワードがデータベースと一致する場合としない場合の2通り、cookieがある場合、ない場合の2通り、もしcookieがある場合は、データベースの値と一致する場合としない場合の2通りが考えられます。一番最適な条件文はどのようにすればよいでしょうか? またその処理はどのようにすればよいのでしょうか。 例えばcookieがあり、データベースと一致しない場合、$_SESSIONの初期化、setcookieでクッキーの削除、session_destroy()するなど。。。なにかよくわからなくなってしまいました。 ・二つ目は、 上のプログラムではじめsession_name('sid')およびsession_start()を宣言し、クライアントとサーバに$sid=session_idを発行しています。なので、$_COOKIE['sid'];の値には session_id()($sid)になっているはずです。 下のほうで、セッションの管理を行う際、 //クッキーがある場合 else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } クッキーがあり、データベースと一致しない場合に、sessionおよび、cookieの破棄をしています。この前後でechoをもちいて$_COOKIE['sid']の値を出力すると、 破棄するの前のechoでクッキーが表示されず、 破棄したあとのechoでクッキーが表示されました。 なぜこのような結果になるのですか、逆では?と思いました。

    • 締切済み
    • PHP
  • 負荷分散におけるセッションIDの共有

    Webサーバ(apache1.3系)を冗長構成にしている場合、 PHPのセッションIDを使用してのセッションIDの共有は、どのような方法がありますでしょうか? (どっちに振り分けられても、セッションが切れない方法です。) ※DBを使用する方法以外でお願いします。また、モバイルにも対応したいので、Cookieに格納しない方法以外でもお願いします。 参考URL等がありましたら、教えていただけたらとおもいます。 (Java+Tomcatをには、セッションのレプリケーションの機能があることはわかりました。) ロードバランサーの設定にそのような機能がありましたら、教えていただきたいです。

    • 締切済み
    • PHP
  • Cookieを用いてのセッション管理

    以前も問い合わせさせていただいた件なのですが、 未だ解決していないので、再掲させていただきます。 やりたいことは、 個人認証のページを作り、ログオフ後、ブラウザの戻るボタンを押しても、 ログイン中となるのを避けたい。 以下のような感じで、cookieを使って実現しようとしているのですが、 ログオフ時にcookieの削除は、うまくいったのですが、 ブラウザの戻るボタンでログイン中のページに戻ると、 $ENV{'HTTP_COOKIE'}の中身を見ると、実際にはCookieは削除されているにも関わらず、 Cookieの情報がよみこまれているため、ログイン中となってしまいます。 何か基本的なやり方を間違っているような気がします。 どなたかご教授願います。 ↓a1.cgi(ログイン画面)--------------  : (ID、パスワード認証後) #Cookie書き込み print "Content-type: text/html\n"; print "Set-Cookie: NAME=aaa; expires=Tue, 1-Jan-2030 00:00:00 GMT;\n"; print "\n";  : ↑a1.cgi(ログイン画面)-------------- ↓a2.cgi(ログイン中)--------------  : #Cookie読み込み $cookie01 = "$ENV{'HTTP_COOKIE'}\n";  : <HEAD> <!-- キャッシュクリア --> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">  : </HEAD>  : ↑a2.cgi(ログイン中)-------------- ↓a3.cgi(ログオフ)--------------  : #cookie削除。 print "Content-type: text/html\n"; print "Set-Cookie: NAME=aaa; expires=Fri, 31-Dec-1999 23:59:59 GMT;\n"; print "\n";  : </HEAD>  : ↑a3.cgi(ログオフ)-------------- ※a1.cgi、a2.cgi、a3.cgiは同じディレクトリです。 よろしくお願いします。

    • ベストアンサー
    • Perl