プロが教えるわが家の防犯対策術!

こんにちは。
セッションを使ったデータの受け渡しをしたいのですが、
(携帯を考慮してcookieは使わないやり方で)
hiddenにセッションIDを持たせる方法で書いてみたのですが、
うまくいきません。

送られてはいるけど、受け取れていないのかな…?
とは思うのですが、対処がわかりません。
以下のソースです。(確認用でGETにしてます)
望むのは、printされたセッションIDとテキスト内のセッションIDが
同一になる(=セッションが保持できてるということですよね?)
かつ、submitしても、セッションIDが変わらない、という状況です。

よろしくお願いいたします。


print "Content-type: text/html\n\n";

use CGI;
use CGI::Session qw/-ip-match/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
} else {
$query_string = $ENV{'QUERY_STRING'};
}

my $cgi = new CGI;
CGI::Session->name("session_id");
my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'});

$sid = $session->id();
$session->param('value', $sid);
$sesid = $session->param('value');
print $sesid."<br>\n";

undef($session);

@query = split(/&/, $query_string);
foreach $query (@query){
($name, $data) = split(/=/, $query);
$data{$name} = $data;
}

print <<"EO";
<html><head>
<title>
</title>
</head>
<body><hr><hr>
<form action="./test.cgi" method="GET">
<input type="hidden" name="session_id" value="$sesid">
<input type="text" name="btn" size="50" value="$data{'session_id'}"><br>
<input type="submit" value="submit"><br>
</form>
<hr><hr></body></html>
EO

A 回答 (1件)

perl の session は使ったことないので外しているかもしれませんが。



受け取ったsession_idを再利用しないと当然同じIDにはなりません。
記載されいているサンプルCGIは常に新規session_idを作成しているようですが・・・

下記のようにするとどうでしょうか。

print "Content-type: text/html\n\n";

use CGI;
use CGI::Session qw/-ip-match/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
} else {
$query_string = $ENV{'QUERY_STRING'};
}

@query = split(/&/, $query_string);
foreach $query (@query){
($name, $data) = split(/=/, $query);
$data{$name} = $data;
}

my $cgi = new CGI;
CGI::Session->name("session_id");
my $session = new CGI::Session("driver:File", $data{'session_id'}, {Directory=>'./session'});

$sid = $session->id();
$session->param('value', $sid);
$sesid = $session->param('value');
print $sesid."<br>\n";

undef($session);


print <<"EO";
<html><head>
<title>
</title>
</head>
<body><hr><hr>
<form action="./test.cgi" method="GET">
<input type="hidden" name="session_id" value="$sesid">
<input type="text" name="btn" size="50" value="$data{'session_id'}"><br>
<input type="submit" value="submit"><br>
</form>
<hr><hr></body></html>
EO
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!