質問編集履歴
2
整理しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,51 +1,151 @@
|
|
1
1
|
cgiで会員制のページを作っています。
|
2
2
|
|
3
|
-
|
3
|
+
仮にこれをAサイト。
|
4
4
|
|
5
|
-
|
5
|
+
このAサイトにログインするためには、まったく別もののBサイトからAサイトログインページに遷移させます。
|
6
|
+
|
7
|
+
そしてこの時のログインは、Bサイトの会員情報を使ってログイン可能となります。
|
8
|
+
|
9
|
+
ログイン後Bサイトのセッション情報をAサイトのセッションに渡している仕組みです。
|
10
|
+
|
11
|
+
※AサイトはPerl、BサイトはEC-cube PHPで作られています。
|
6
12
|
|
7
13
|
|
8
14
|
|
9
|
-
|
15
|
+
問題は、Aサイトを検索エンジンで検索した際に通常ならログイン後にしか見れないページが表示されてしまいます。
|
10
16
|
|
11
|
-
|
17
|
+
そこで、セッションが保存されていない場合は、ログインページにリダイレクトするようにしたいです。
|
12
18
|
|
13
|
-
|
19
|
+
Bサイトのセッション情報をAサイトのセッションに渡している仕組みは、BサイトのPHPに書いてます。
|
14
20
|
|
21
|
+
ただBサイトから渡されたセッションをAサイトで有無をチェックする方法がわかりません。
|
15
22
|
|
16
|
-
|
17
|
-
|
23
|
+
Perlは全く無知なので教えていただきたいです。
|
18
24
|
|
19
25
|
よろしくお願いいたします。
|
20
26
|
|
21
27
|
|
22
28
|
|
29
|
+
下記参考URLです。
|
23
30
|
|
24
|
-
|
25
|
-
--
|
31
|
+
[リンク内容](http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod)
|
26
32
|
|
27
33
|
|
28
34
|
|
29
35
|
|
30
36
|
|
31
|
-
|
37
|
+
Aサイト:ログイン画面
|
32
38
|
|
39
|
+
```CGI
|
40
|
+
|
33
|
-
|
41
|
+
#!/usr/bin/perl
|
34
42
|
|
35
43
|
|
36
44
|
|
37
|
-
|
45
|
+
use CGI;
|
38
46
|
|
39
|
-
|
47
|
+
use CGI::Session;
|
40
48
|
|
41
49
|
|
42
50
|
|
43
|
-
|
51
|
+
my $session = new CGI::Session("driver:File", undef, {Directory=>'/tmp'});
|
44
52
|
|
45
|
-
まずこのサイトのログインページに行くには「Bサイト」のバナーをクリックしなければなりません。それが正規ルートになります。
|
46
53
|
|
47
|
-
しかし、ブラウザで「Aサイト」の名前を検索すると本来ならログイン後に表示されるページがいくつかでます。
|
48
54
|
|
49
|
-
|
55
|
+
# セッションにデータを格納
|
50
56
|
|
57
|
+
$session->param('f_name', 'Sherzod');
|
58
|
+
|
59
|
+
# or
|
60
|
+
|
61
|
+
$session->param(-name=>'l_name', -value=>'Ruzmetov');
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
# データの回収
|
66
|
+
|
67
|
+
my $f_name = $session->param('f_name');
|
68
|
+
|
69
|
+
# または
|
70
|
+
|
71
|
+
my $l_name = $session->param(-name=>'l_name');
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
Bサイト:ログインのコントローラー
|
80
|
+
|
81
|
+
```PHP
|
82
|
+
|
83
|
+
public function vet_job_login(Application $app, Request $request)
|
84
|
+
|
85
|
+
{
|
86
|
+
|
87
|
+
if ($app->isGranted('IS_AUTHENTICATED_FULLY')) {
|
88
|
+
|
89
|
+
log_info('認証済のためログイン処理をスキップ');
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
$actionUrl='http://***/***/***';
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
$Customer = $app->user();
|
102
|
+
|
103
|
+
$customer_id = $Customer['id'];
|
104
|
+
|
105
|
+
$customer_mail = $Customer['email'];
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
$content="<form style='display:none' name='submit_form' id='submit_form' action='{$actionUrl}' method='post'>
|
112
|
+
|
113
|
+
<input type='text' name='customer_id' value='{$customer_id}'>
|
114
|
+
|
115
|
+
<input type='text' name='email' value='{$customer_mail}'>
|
116
|
+
|
117
|
+
</form>
|
118
|
+
|
119
|
+
<script type='text/javascript'>
|
120
|
+
|
51
|
-
|
121
|
+
document.submit_form.submit();
|
122
|
+
|
123
|
+
</script>";
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
exit($content);
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
$builder = $app['form.factory']
|
134
|
+
|
135
|
+
->createNamedBuilder('', 'customer_login');
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
$form = $builder->getForm();
|
140
|
+
|
141
|
+
return $app->render('Mypage/vet_job_login.twig', array(
|
142
|
+
|
143
|
+
'error' => $app['security.last_error']($request),
|
144
|
+
|
145
|
+
'form' => $form->createView(),
|
146
|
+
|
147
|
+
));
|
148
|
+
|
149
|
+
}
|
150
|
+
|
151
|
+
```
|
1
補足
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Pe
|
1
|
+
Perl:cgi セッション管理
|
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
Pe
|
9
|
+
Perlやcgiも全くの初心者なので教えていただきたいです。
|
10
10
|
|
11
11
|
ネットでいろいろ調べていますが、まず~.plに書くか~.cgiに書くかもわからないです。
|
12
12
|
|
@@ -17,3 +17,35 @@
|
|
17
17
|
どうかお力をおかし下さい。
|
18
18
|
|
19
19
|
よろしくお願いいたします。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
---------------------追記・補足------------------------------------------------
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
現在はまだ何も書いてないです。
|
32
|
+
|
33
|
+
ほんとに手も足もでていないです......w
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
一応下記URLを参考にしようとしてました。
|
38
|
+
|
39
|
+
[リンク内容](http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod)
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
この問題のサイトを「Aサイト」とすると、
|
44
|
+
|
45
|
+
まずこのサイトのログインページに行くには「Bサイト」のバナーをクリックしなければなりません。それが正規ルートになります。
|
46
|
+
|
47
|
+
しかし、ブラウザで「Aサイト」の名前を検索すると本来ならログイン後に表示されるページがいくつかでます。
|
48
|
+
|
49
|
+
出てしまうのはしょうがないとして、それをクリックしたらそのままログイン後に表示されるページに遷移してしまします。
|
50
|
+
|
51
|
+
この場合のときにログイン画面に自動的に遷移するのが目的です。
|