<input type="hidden" value="myID">みたいな隠しフォームで
行く先々の画面に値をPOSTで渡してきました。
他方、 header("Location: mypage.php")
のように画面を遷移させる場合、遷移先の画面に
$_POST["myID"]のように値を渡すことはできませんか?
この場合session_start();を使って、$_SESSION["myID"]のように値を
渡す(保持する)のが王道なのでしょうか?
セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
できれば使いたくないのです。
具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。
入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、
問題なければmypage.phpにリダイレクトさせる枠組みですが、
header("Location: mypage.php");という風に遷移した場合は、
遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね
(値を受け取れませんよね)??
妙案あればご教示下さい。
<?php
if ($_POST["reg"] == "" ) $errFlg = true;
if (!$errFlg) {
if (strlen($_POST["myName"]) > 30) {
$errFlg = true;
$errStr["myName"] = "30字以下";
}
$errMsg = "エラー!!";
}
if ($errFlg) {
?>
<html>
<body>
<form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">
氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>
<input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">
</form>
<input type="submit" name="reg" value="登録">
</body>
</html>
<?php
} else {
$sql = "update mytable set myID = 'xxxx'";
$rst = mysql_query($sql, $con);
header("Location: mypage.php");
}
?>
No.2ベストアンサー
- 回答日時:
結局「sessionの真似事」を自前でするようなことになりそうです。
・ランダムなファイル名を作成して、そのファイルにアドレスを書き込む。
・GETでファイル名を渡す。
・ファイル名を元にそのファイルからアドレスを取り出す。
・ファイルを削除する
何らかのトラブルで残ってしまったファイルは「一定時間以上経過したファイルは定期的に削除」というGCの真似事までしないといけなくなりますけど。
hidden(POST)で持ち回るということからも「セキュリティ」はまったく考慮しなくていいシステムのようなので、そうであれば「復号可能な暗号化」という手もありかもしれません。
>セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
>できれば使いたくないのです。
普通に使いますけどねぇ・・。
shimixさん、興味深いご指摘ありがとうございました。
>結局「sessionの真似事」を自前でする
結構大変なことになるんですね・・・
>hidden(POST)で持ち回るということからも「セキュリティ」は
>まったく考慮しなくていいシステムのようなので、
不勉強ですみません、
セキュリティは考慮しなくて良いわけではないですが、
#1さんもご指摘のように、危なさはPOST<GET、POSTもは
けっこう危ないのでしょうか?
SESSIONを使えるなら、そのほうがいいのでしょうか??
> >セッションと聞くと何かとトラブルになりやすそうなイメージがあり、
> >できれば使いたくないのです。
>
> 普通に使いますけどねぇ・・。
そういうものですか・・・トラブルというと語弊がありますね。
扱いが難しそうなイメージがあって使わないほうが無難な
固定観念がありました。
POST持ち回りより、セッションのほうがいいですか。
本題から派生質問になりますが、もしよろしければ率直なところ、
アドバイスいただけますと幸いです。
No.3
- 回答日時:
>#1さんもご指摘のように、危なさはPOST<GET、POSTもは
>けっこう危ないのでしょうか?
>
>SESSIONを使えるなら、そのほうがいいのでしょうか??
POSTにしてもGETにしてもブラウザとサーバの間のデータを見られたら丸見えです。また生のIDをやり取りしてしまうと、ローカルにhtmlを落として加工してPOSTされたら「別のIDになりすます」ことも簡単にできてしまいます。sessionを使えば「サーバ側で作成したランダムなsession_id」を推測しないといけないので強度は上です。そこまでやっていてもセッションハイジャックなんてことも考慮しないといけませんけど(下記URLなどを参考に)。
http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_se …
SSLを使えればいいんでしょうけど、個人サイトではなかなか難しかったりもします(もちろん個人情報が乗っかるようだとSSLが必須ですが)。
そこまでは不要という場合でも単純にGETやPOSTに生のIDを入れるべきではないです。自分のブラウザのHTMLに自分のIDが見えれば、ちょっとした悪戯心でなりすましを「やってみよう」という気にさせてしまいます。sessionを使っていれば少なくとも普通のユーザが「ちょっとやってみよう」とは思わないでしょう。
shimixさん、たびたび詳細に解説ありがとうございました。
本当によく理解できました。
#1さんのおっしゃる
>ハックがちょっと面倒なだけで
というのは、ブラウザのURL欄をいじるより
「ローカルにhtmlを落として加工」方が少し面倒、そういう意味に
捕らえました。いずれにせよ、認証とかでセッション使ったほうが
便利なので、変数の持ち回りはやめにします。
本当にありがとうございました
No.1
- 回答日時:
ヘッダのLocationは純粋にURLを読み替えているのでPOST値は
渡し様がないでしょうね。
そもそもPOSTはハックがちょっと面倒なだけで秘匿性があるわけではなく
セキュリティ上GETと変わりません。
ならGETでわたしちゃうというの手かなぁ・・・
ちなみに真剣にソースみてないのでなんとも言えませんが
$sql = "update mytable set myID = 'xxxx'";
ってmytableのmyIDを全てxxxxにしてしまうという恐ろしいことを
やっていますが、これは仕様上問題ないのでしょうか?
yamabejpさん、いつもお世話になります。
元ソースの仕掛けは、一昨年yamabejpさんに教わったものだったりします。
http://okwave.jp/qa2419133.html
ご教示のGETで渡す場合、URLにメールアドレスが表示されてしまいますが、
表面上隠して渡すことはできますか。
http://localhost/sample.php?id=myname@example.com
ちょっと調べてみたところ、無理っぽいですが・・・
http://mtlab.ecn.fpu.ac.jp/WSM_2000/000829170425 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
HTMLの値の渡し方について質問です。 HTMLで値を今の画面から次の画面に渡すにはどういう文を使う
HTML・CSS
-
PHP ボタンが押されたら処理を実行する
PHP
-
HTMLファイル同士での値渡し
JavaScript
-
-
4
ページ間で変数を保持したい
JavaScript
-
5
PHPで、エラーがない場合のみ画面遷移させたい
PHP
-
6
別ファイルの変数を呼び出したいのですが?
PHP
-
7
データ送信をボタンを押さずに行いたいのですが...
PHP
-
8
POSTを使わずに値を渡す方法
PHP
-
9
javascriptでセレクトボックスのselected"を動的につ"
JavaScript
-
10
webページをランダムで遷移する方法あります?
HTML・CSS
-
11
.phpファイルが、表示されない
PHP
-
12
PHPでファイルアップロード時に確認画面を挟みたいです
PHP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのエラーの解消法について教...
-
送信ボタンでカウントアップ
-
セッションを使わずに遷移先画...
-
phpで、フォームのラジオボタン...
-
HTML_QuickFormの関数について
-
テキストリンクをPOST送信したい
-
アマゾンのような評価の星を選...
-
PHP 入力フォームにて半角スペ...
-
チェックボックスがチェックさ...
-
PHP MySql 画像を取得
-
画面が更新されてもチェックボ...
-
フォームの状態やGETのURLは保...
-
(Excel)VBA ファイルパスからフ...
-
XMLデータをPOSTで送信・受信す...
-
PHPで画像の渡しが上手く行きま...
-
DBの値をチェックボックスに反...
-
PHP DBの登録情報をラジオボタ...
-
ファイル名を変更してアップロ...
-
ラジオボタンをsessionで使いたい
-
チェックボックスを用い、MySQL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでURLにジャンプするには?
-
フォーム送信後の更新ボタンで...
-
PHPのエラーの解消法について教...
-
テキストリンクをPOST送信したい
-
JavaScript変数をPHPへ渡す
-
セッションを使わずに遷移先画...
-
PHPでファイルアップロード時に...
-
フォームで作った送信ボタンが...
-
phpで、フォームのラジオボタン...
-
$_POST['hoge']のデータをフラ...
-
ボタンをクリックでPHP文を実行
-
ローカルにあるhtmlのフォーム...
-
POSTデータをフォームに残す方法
-
フォームでの記入項目
-
Submit(送信ボタン)を押した...
-
なぜ、unexpected T_VARIABLEに...
-
formの外にあるチェックボック...
-
PHP 入力フォームにて半角スペ...
-
サブウィンドウのFORM内データ...
-
アマゾンのような評価の星を選...
おすすめ情報