こんにちは。
セッションを使ったデータの受け渡しをしたいのですが、
(携帯を考慮して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件)
- 最新から表示
- 回答順に表示
No.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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
int型(2バイト)データの分割
-
エクセルVBA:日付データの変換...
-
c言語 Bitについて
-
linuxのシェルでファイル名に先...
-
printfの%eで指数部分の桁数を...
-
C#でのswitch文
-
テキストファイルの結合について
-
POSTで配列のデータを渡す方法は?
-
PINVOKEで構造体配列をマーシャ...
-
C言語 ファイル内のデータと入...
-
【Excel VBA】10進数を2進数に...
-
パイソン、データーサイエンス...
-
H8/36064を使ったシリアル通信...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
ポインター引数の関数でコンパ...
-
printfの%eで指数部分の桁数を...
-
パイソン、データーサイエンス...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
python 気象データの取得
-
テキストファイルの結合について
-
RegQueryValueExでの2バイト文字
-
linuxのシェルでファイル名に先...
-
'dataType' 引数を Null にする...
-
C言語についてです! 同じ年の...
-
オセロゲーム 2次元配列で困...
-
PINVOKEで構造体配列をマーシャ...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
System.Collections.ArrayList ...
おすすめ情報