上記タイトルのようなサイトで行われている事についてご質問があります。
IDとパスワード等をいれる画面の下の方にチェックボックスで「次回からはID・パスワードを記憶する」というような項目があり、そこにチェックを入れると次回からパスワード等を入れなくても認証される事ができるようですが、そのプログラムをどのように作のか教えて頂けないでしょうか? 本屋さん・友達などにも聞き込みをしましたが解りませんでした。

その2
IDを最初に登録して発行する時に自動でIDを発行したいのですが自動発効のためにサブルーチンなどを教えた頂けないでしょうか?
ユーザーにわざわざIDを入れなくても自動で発行させた方だが手間がかからなくてよいとおもったと同時に10項目ほどIDを入れる項目があるのでそれらを1つ1つ入れていくとなると手間と管理が難しいという理由から質問してみました。
どうか助けて頂けないでしょうか。
お願します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

その1


 クッキーを使います。クッキーとは、ブラウザにパスワードなどを記憶させておくための機能のことです。
 http://tohoho.wakusei.ne.jp/
 ここにそれっぽいこと書いてあります。

その2
 これは自分で考えてもらわないと、どうしようもないです(^_^; 特定の規則なんかがあるわけではないので。
 ランダム関数などを使って8文字の文字列を作る、みたいなことをやればいいのではないでしょうか?
    • good
    • 0

Perlは素人ですけど、



その1:Cookieを使用すればよいのではないでしょうか。

その2:IDを自動で作成したいとのことですが、自分でルールを
    考えればよいのではないでしょうか。
    乱数を使用するとか、順番で1,2,3...としていくとか。

急いでいるのかもしれませんが、この程度のことは自分で学んでいかないと
スキルが上達しませんよ。
Cookieの使い方については、Perlの書籍を何冊か読めば出ていると思います。
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Qパスワード自動生成スクリプトについて

solaris10(x86)のOSでユーザーパスワードを自動変更するためのスクリプトを作成しています。
※使用言語はperlでExpectモジュールを使っています。

仕様としては以下のパスワード制限を満たす文字列を自動生成し、
リストファイル(list.lst)を元にExpectモジュールを使って、
ユーザーパスワードを自動変更後に結果をファイル(result.log)へ出力します。

パスワード制限
・アルファベット大文字小文字(1文字以上)含む
・数字を(1文字以上)含む
・記号を(1文字以上)含む

ですが、実際に変更しようとすると、
稀に記号を含まないパスワードが出来てしまいます。
以下の場合は「test1」ユーザーがそれに当たります。

# cat result.log
User: test1
password: 14P2YiZy
User: test2
password: @u1iXr%q
User: test3
password: EQ2t6H(6

rand関数の使い方が良くないのか、
正常に記号部分の配列にpushされていないのか、
正直お手上げです。

以下にスクリプトの内容を記載しますので、
記号含むパスワードを自動生成するにはどうしたらよいか、
どなたかアドバイス頂けませんでしょうか。

宜しくお願い致します。

#--------------------------------
#!/usr/bin/perl -w

use strict;
use File::Copy;
use Expect;

##### password configuration #####
my $lng = 8; #Length
my $num = 1; #Number (0=disabled, 1=enabled)
my $cap = 1; #Upper (0=disabled, 1=enabled)
my $sml = 1; #Lower (0=disabled, 1=enabled)
my $mark = 1; #Symbol (0=disabled, 1=enabled)

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$mon += 1;
$year += 1900;

##### Variable initialization #####
my $ps;
my @words;

##### log files #####
my $LGFILE = 'result.log';
my $LGFILE_OLD = "result.log.${year}${mon}${mday}";

##### file list PATH #####
my $file='list.lst';
my $SADW = '/etc/shadow';

if ($num == 1) {
push @words, (0..9);
}
if ($cap == 1) {
push @words, ('A'..'Z');
}
if ($sml == 1) {
push @words, ('a'..'z');
}
if ($mark == 1) {
push @words, ('#', '$', '%', '(', ')', '-', '=',
'^', '~', '|', '@', '`', '[', ';', ':', '+', '*',
'/', '?', '_');
}

if (-e "$LGFILE_OLD"){
exit(1);
}

copy "$SADW", "$SADW.${year}${mon}${mday}" or die "Copy failure $!";
chmod(0400, "$SADW.${year}${mon}${mday}");

if (-e "$LGFILE"){
move("$LGFILE", "$LGFILE_OLD");
chmod(0400, "$LGFILE_OLD");
}
open(F, "<$file") or die "Cannot open $file: $!";
while( my $line = readline F ){
chomp($line);
open(IN, ">>$LGFILE");
for (my $var = 0; $var < $lng; $var++) {
my $words_num = @words;
$ps = $ps . "@words[rand($words_num)]";
}
my $command = Expect->spawn("passwd ${line}") or die "Can't start program... $!\n";
$command->log_stdout(0);
$command->expect(1, "New password:");
print $command "$ps\n";
$command->expect(1, "Re-enter new password:");
print $command "$ps\n";
print IN "User:\t${line}\n";
print IN "password:\t${ps}\n";
$command->soft_close();
undef $ps;
chmod(0400, "$LGFILE");
close(IN);
}
close(F);

exit(0);
#--------------------------------

solaris10(x86)のOSでユーザーパスワードを自動変更するためのスクリプトを作成しています。
※使用言語はperlでExpectモジュールを使っています。

仕様としては以下のパスワード制限を満たす文字列を自動生成し、
リストファイル(list.lst)を元にExpectモジュールを使って、
ユーザーパスワードを自動変更後に結果をファイル(result.log)へ出力します。

パスワード制限
・アルファベット大文字小文字(1文字以上)含む
・数字を(1文字以上)含む
・記号を(1文字以上)含む

ですが、実際に変更しようとすると、
稀に...続きを読む

Aベストアンサー

このプログラムがしているのは、パスワードとして利用可能な文字を@wordsに登録し、その中からランダムに文字を選ぶということですよね?これだと、記号が選ばれる可能性はあっても、必ず記号が選ばれるかは保証されません。なぜなら、期待する条件を満たすかをチェックするコードは一切無いからです。

つまり、
for (my $var = 0; $var < $lng; $var++) {
my $words_num = @words;
$ps = $ps . "@words[rand($words_num)]";
}
という、パスワードを生成しているコードを下記のようなコードに書き換える必要があるでしょう。
while (1) {
for (my $var = 0; $var < $lng; $var++) {
my $words_num = @words;
$ps = $ps . "@words[rand($words_num)]";
}
条件を満たすかチェックし、満たした場合のみbreak, 満たさない場合は$psを''でクリア。
}

$num などの条件を一切無視すると、チェックするコードはこんな感じですね。
if ($ps =~ /[0-9]/ && $ps =~ /[a-z]/ && $ps =~ /[A-Z]/ && $ps =~ /[#$%()-=略]/) { break; }
else { $ps =''; }

このプログラムがしているのは、パスワードとして利用可能な文字を@wordsに登録し、その中からランダムに文字を選ぶということですよね?これだと、記号が選ばれる可能性はあっても、必ず記号が選ばれるかは保証されません。なぜなら、期待する条件を満たすかをチェックするコードは一切無いからです。

つまり、
for (my $var = 0; $var < $lng; $var++) {
my $words_num = @words;
$ps = $ps . "@words[rand($words_num)]";
}
という、パスワードを生成しているコードを下記のようなコードに書き換える必要があ...続きを読む

Q入力項目を検索項目に反映させたいのですが

CGI初心者です。もともと他のプログラムも組んだ経験がないので、テキストも何冊か購入したのですが、いまいちわかりません。
いま、データベース検索のものを作成(カスタマイズ)しているのですが、入力項目で入力したものを、検索する項目(プルダウンメニューにしたいのです)に反映させるには、どういうふうに作成したらいいのでしょうか?
なにか、ヒントでかまわないので教えてください。
例えば、参加型作品のなかで、作者を記入したら、検索項目にその作者が表示されてひとつの検索絞り込みのキーにしたいのです。
よろしくおねがいします。

Aベストアンサー

 いまのboriさんは希望のCGIに対して自分の能力が空回りしている状態なので、もうちょっと細かいプログラム設計をした方がいいですね(^_^;
 たとえば、「A」というプログラムを完成させるためには、「1」「2」「3」という3つの段階を踏まなければならない。
 「1」をやるためには、どういうプログラミングをすればいい、ということを本を読んで1つ1つ調べていくのです。
 とりあえず、手持ちの本の中から1冊選んで、そこに掲載されているプログラムをみんな入力して実行してみてください(このとき、プログラムは手入力しないと勉強になりません)。
 それをやれば、Perl というものがどんなもので、いったいどういうことが出来るのか、といったことが分かってくると思います。

Qperlで 引数1を別リストの複数項目に自動的に変更して実行させたいです

perl.pl 引数1(項目) 引数2(A.txt)を実行する際に、
引数1を 他リスト(B.txt)にある複数 項目に 自動的に変更して実行させたい場合のスクリプトの書き方を教えていただければ幸いです。
初学者の質問で申し訳ありませんがよろしくお願いします。

Aベストアンサー

メインルーチン全体をループにして...って構造でできそうですが、詳細はプログラムを見ないことにはなんとも。
# 見ても作るかどうかはなんとも....

> また、 一つ目の引数1で 処理を行い、
> 結果が帰ってきたら 次の項目の引数1で実行というようにすることは可能でしょうか?

これも、おそらくは「可能」ですが、詳細がわからなければ、具体的な方法を提示することはできません。



単純に連続で実行するだけなら、テキストエディタの置換とか、sedとかを使って
perl スクリプト.pl B.txtの項目1 A.txt
perl スクリプト.pl B.txtの項目2 A.txt
perl スクリプト.pl B.txtの項目3 A.txt
....
ってファイルを作って、(windowsなら 〜.batってファイルにして)
sh ファイル とか (Windowsなら 〜.bat )
で実行する、という方法もあります。

Qアルファベットn文字の組み合わせ一覧を生成するサブルーチン

「アルファベットを格納した配列」と「文字列長」を引数として与えると、全ての組み合せの文字列を返してくれるサブルーチンを定義するにはどうすればよろしいでしょうか?
「文字列長」が2や3の場合には以下のようにforeach文を入れ子にしていますが、「文字列長」の変化に対応できるようなサブルーチンを定義したいと考えます。

@cc = qw(a b c d); # アルファベットを格納した配列

「文字列長」が2の場合、
foreach my $c1 (@cc){
foreach my $c2 (@cc){
push(@str, $c1.$c2);
}
}

aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd

「文字列長」が3の場合、
foreach my $c1 (@cc){
foreach my $c2 (@cc){
foreach my $c3 (@cc){
push(@str, $c1.$c2.$c3);
}
}
}

aaa aab aac aad aba abb abc abd aca acb acc acd ada adb adc add baa bab bac bad bba bbb bbc bbd bca bcb bcc bcd bda bdb bdc bdd caa cab cac cad cba cbb cbc cbd cca ccb ccc ccd cda cdb cdc cdd daa dab dac dad dba dbb dbc dbd dca dcb dcc dcd dda ddb ddc ddd

アドバイスをよろしくお願いします。

「アルファベットを格納した配列」と「文字列長」を引数として与えると、全ての組み合せの文字列を返してくれるサブルーチンを定義するにはどうすればよろしいでしょうか?
「文字列長」が2や3の場合には以下のようにforeach文を入れ子にしていますが、「文字列長」の変化に対応できるようなサブルーチンを定義したいと考えます。

@cc = qw(a b c d); # アルファベットを格納した配列

「文字列長」が2の場合、
foreach my $c1 (@cc){
foreach my $c2 (@cc){
push(@str, $c1.$c2);
}...続きを読む

Aベストアンサー

No.1です.
問題を誤読してました.
順列ではないですね.
問題は,文字が``N''種類あるときに
n桁の文字列を生成するということでした.

N進数のn桁の数をすべて列挙するのと同じなので
例えば以下のようにできます.

use strict;
use warnings;

use strict;
use warnings;

sub to_N_pos{
my ($n,$N,$L)=@_;
my @result;
for my $i (1..$L){
unshift @result, $n % $N;
$n = int($n / $N);
}
return $n ? () : @result;
}

sub listup{
my ($list,$L)=@_;
my @result;
my $N=scalar @{$list};
my $n=0;
while(my @r = to_N_pos($n,$N,$L)){
my $result;
for my $i (@r){
$result = $result.$list->[$i];
}
push @result, $result;
$n++;
}
return @result;
}

$,=", ";
print listup(['a'..'d'],2);

listupは
文字のリストのリファレンス,文字列の長さ
を引数として,
結果を配列として出力します.

No.1です.
問題を誤読してました.
順列ではないですね.
問題は,文字が``N''種類あるときに
n桁の文字列を生成するということでした.

N進数のn桁の数をすべて列挙するのと同じなので
例えば以下のようにできます.

use strict;
use warnings;

use strict;
use warnings;

sub to_N_pos{
my ($n,$N,$L)=@_;
my @result;
for my $i (1..$L){
unshift @result, $n % $N;
$n = int($n / $N);
}
return $n ? () : @result;
}

sub listup{
m...続きを読む

QPerlですが、サブルーチンのイメージを教えて下さい

ある本によると「サブルーチンは渡された値を指示通りに処理し、結果を吐き出す箱のようなものである」とあります。イメージ図は本体が箱で上に煙突の様なものが突き出ていてそこからデータを入れて、箱の側面にも煙突があり、加工されたデータが出てくるイメージです。他にイメージはありますでしょうか。

Aベストアンサー

Perlの引数は 一次元配列 @_($_[0], $_[1], $_[2], ....)によって渡されるので,私の頭の中にはこんなイメージがあります。

 +――――+
9|■■■■|2,3,4
←|■■■■|←←←←←
 +――――+

右側から複数の材料(引数)がベルトコンベアに乗って一列に流れてくる(一次元配列@_)と,それがブラックボックス(関数)に吸い込まれて,加工製品(戻り値)が1つ出てくる。

#2を真似するなら,こんなコードを想定しています。

print &a(2, 3, 4);

sub a(){
  ($x, $y, $z) = @_;
  return $x + $y + $z;
}


おすすめ情報