解決済みの質問
インデックスページ→登録ユーザチェック→認証→ログインページ
といった流れのものですが、
ログインページにGETで値を渡すとURLにパスワードやアドレスがむき出しになってしまうので、それを回避する方法を教えて下さい。
単純にPOSTでもっていきたいのですが、登録ユーザチェックページと認証ページはチェックしてロケーションのみのファイルなので、POSTだと出来ないですよね?
どなたか分かるかた回答お願い致します。
詳細は以下になります。
■インデックスページ
POSTでユーザチェックページに値渡し
■ユーザチェックページ
GETで認証ページに値渡し
■認証ページ
GETでログインページに値渡し
■ログインページ
ここのページでURLに引数がむき出しになるのをふせぎたいです。
投稿日時 - 2006-03-24 20:39:35
#3です。
セッションの大まかな流れは以下のような感じです。
□■□■□■□■□■□■□■□■□■□■□■□■□■
session_start(); // セッションの開始
$_SESSION['キー'] = '値'; // セッションに値を保存(配列に値を格納していくイメージ)
session_destroy(); // セッションの破棄
□■□■□■□■□■□■□■□■□■□■□■□■□■
※注意:「session_start()」はどのような出力が行われるよりも先に実行しなければなりません。
[インデックスページ]
------------------------------------------------
// セッションの開始session_start();
// セッションにIDを格納する
$_SESSION['s_id(キーなので何でもよい)'] = $id;
// セッションにパスワードを格納する
$_SESSION['s_pw(キーなので何でもよい)'] = $pw;
------------------------------------------------
[ユーザ認証]
------------------------------------------------
session_start();
// ユーザの認証
if(($_SESSION['s_id']=='認証ID') && ($_SESSION['s_pw']=='認証パスワード')) {
/* 認証成功 */
} else {
/ * 認証失敗 */
}
------------------------------------------------
セッションが不要になった段階でセッションを破棄します。
※これをしないとサーバ上にセッションデータ(ファイル)がたまっていきます。
// セッションの破棄
session_destory();
ログイン/ログアウトという機能があるのなら
ログアウト時に「session_destroy()」してもいいかもしれません。
(ただし、処理のないようによります)
大まかなものなのでこれだけでは理解するには不十分です。
rad6さんご自身でももう少しセッションについて調べてみてください。
「セッション管理」「PHP」
で検索(Googleなど)するだけでもかなり情報が得られると思います。
投稿日時 - 2006-03-25 17:40:15
お礼
ご回答ありがとう御座います~!!
ものすごい勉強になりました。
ものすごい親切な方で良かったです。
本当に、本当にありがとうございました~!!!
投稿日時 - 2006-03-25 19:43:42
2人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(3件中 1~3件目)
rad6さん、こんにちは。
具体的な流れがもう少し分からないですが、POSTは可能だと思います。
ロケーションのみというのは
header("Location: ...");
といったものでしょうか。
私はユーザ毎のページにする場合、SESSIONを使っています。
> また、JavaスクリプトでのSubmitも興味があります。
> 具体的にどのようにすれば良いかわかりますか?
例えば次のような形です。
----------------------------------------------
<script type="text/javascript">
<!--
document.write('<form action="飛ばしたいページ" name="frm1" method="post">');
document.write('<input type="hidden" name="id" value="ここにID({$id}などで)">');
document.write('<input type="hidden" name="pw" value="ここにパスワード({$pw}などで)">');
document.write('</form>');
//ここで飛ばしたいページを指定することもできます。
//document.forms['frm1'].action = "ページ";
//ここで送信方法(POST、GET)を指定することもできます。
//document.forms['frm1'].method = "post";
// これでjavascriptにより指定したフォームの送信を行います。
document.forms['frm1'].submit();
//-->
</script>
-----------------------------------------------
ただし、javascriptが無効にされていれば、当然送信されません。
ですので、確実な方法とは言えません。
インデックスページでjavascriptが有効か無効かを判断し、
そこでjavascrptが無効にされていれば次のページへ行けないようにするなど
が必要です。
ユーザ、認証チェックページは自動で画面遷移するのですよね?
もし、そうではなく、ユーザが何かのボタンを押してページ遷移するのであれば、javascriptを無効にできます。
javascriptが無効のときには以下のタグ(noscript)の内容が実行されます。
-----------------------------------------------
<noscript>
JavaScriptを有効にしてください。
</noscript>
-----------------------------------------------
[JavaScriptを有効/無効の切替(IE)]
ブラウザのツール(T) >> インターネットオプション(O) >>
セキュリティタブ >> レベルのカスタマイズ(C) >>
「スクリプト」の「アクティブ スクリプト」の切替
投稿日時 - 2006-03-25 11:52:25
お礼
ご回答あがとうございますーー!
100点満点のご回答ありがとう御座いました!!!
もしよろしければですけど、セッションで値を渡す方法を教えてくれたら幸いです☆
投稿日時 - 2006-03-25 12:32:21
SESSION変数に入れてしまえば問題ないはずですが。
破棄とかが面倒でPOSTを使いたいなら、
ユーザチェックページでhiddenのフォームを使って
認証ページにPOSTする方法もあると思いますよ。
locationでページジャンプするとフォームがsubmitされないんでしたら(その場合はその前のページのPOSTの値が残ってるとおもいますが)、部分的にJavaScriptでsubmitしてしまえば良いです。
細かいところはあまり自信ないんですが、「GETなしでもphpは動く」というのだけは確実です。
投稿日時 - 2006-03-24 22:00:16
お礼
回答ありがとうございます。
SESSION関数を調べてみたいと思います。
また、JavaスクリプトでのSubmitも興味があります。
具体的にどのようにすれば良いかわかりますか?
投稿日時 - 2006-03-25 05:56:02
セキュリティ面ではGETもPOSTもそうは変わらない
んですが、たしかにPCを脇から除かれても
GETだとパスワードがばればれですね。
とりあえずはGETをつかわないという手はないですか?
一つは認証はBasic認証にしてしまう。
もう一つはcookieを使う。
>チェックしてロケーションのみのファイルなので、
>POSTだと出来ない
の意味がよくわかりませんが、別にPOSTでも
できるような気がしますが、どのようなフローを
想定しているのでしょうか?
投稿日時 - 2006-03-24 21:19:20
お礼
4ファイルにわたってインデックスからの値をひきつぐフローです。
投稿日時 - 2006-03-25 05:53:48