質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4178閲覧

PHP セッションについて

phpjo

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/10/28 06:43

PHPでセッションの取得方法について、困っています。

■ファイル構成
・index.php
・mailsend.php
・thanks.php

【index.php】

php

1<form action="mailsend.php" method="post" id="mail" target="_blank"> 2<?php 3print "<input type="hidden" name="mailadress" value="$mailadress">"; 4?> 5<input type="submit" name="mail" id="mail" value="送信"> 6</form>

※このindex.phpはテンプレートで、データベースにより、ページ内容の違うものが生成されるようになっています。(index1.php、index2.php、index3.php…のような感じです。)

【mailsend.php】
メールを送る処理と、thanks.phpに移動する処理が書かれています。

【thanks.php】
セッションを削除する処理が書かれています。

php

1// セッションの開始 2 session_start(); 3// セッション変数の初期化 4 $_SESSION = array(); 5// セッションファイルの削除 6 session_destroy();

index.phpからmailsend.phpに$mailadressの値を渡さないといけないのですが、
input type=hidden
でしてしまうと、ソースを見た時にアドレスが分かってしまいます。

そこで、セッションを使ってみたのですが、

php

1session_start(); 2$_SESSION["mailadress"] = "$mailadress";

そうすると、送信ボタンがクリックされずに他のindexページに移った場合、
そのセッションの値がそのままになってしまってしまいます。

つまり、

↓index1.phpを表示
↓セッションでメールアドレス:index1@が取得される
↓index1.phpでは送信ボタンを押さずにindex2.phpへ移動
↓index2.phpで送信ボタンを押すと、index2@ではなくindex1@へ送信されてしまう

例えば、送信ボタンをクリックした時のみセッションを開始するなど…
何か良いやり方をご教授いただけないでしょうか。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

やろうとしていることがよくわからないのですが、
セッションに格納されているメールアドレスはどこで発生したものなのでしょうか?

もしPOSTするユーザが入力したデータなのだとすれば、hiddenでメールアドレスが見えてもそれは問題になりません。

そうでは無く、
サーバ側にあらかじめ保存されているメールアドレスであり、ユーザには知られたくないメールアドレス
だということであれば、hiddenに送信事に一意なメールアドレスのID(推測されにくいランダムな文字列だといいですね)を入れてどのフォームから送信されたかわかるようにして、
mailsend.php でメールアドレスのIDと実際のメールアドレスをマッチングさせてメールを送信する。という実装が素直だと思います。

投稿2015/10/28 06:53

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpjo

2015/10/28 10:15

分かりにくい説明で申し訳ありません。 ひとまずは、暗号化して埋め込む方法でしのぐことにしました。 他者から引き継いだもので、私自身まだ駆け出しなので、もう一度しっかりヒアリングしたいと思います。 今後作り直す必要がありそうなので、マッチングでの方法、参考にさせていただきます。 本当にありがとうございました。
guest

0

ベストアンサー

普通はデータベースに登録されているメールアドレスを特定するためのキーだけを渡して mailsend.php でキーを使ってメールアドレスを取得し直します。

ただ、ここがよくわからないのですが、
↓index1.phpを表示
↓セッションでメールアドレス:index1@が取得される
↓index1.phpでは送信ボタンを押さずにindex2.phpへ移動
↓●セッションのメールアドレスがindex2@で上書きされ、index1@は消える
↓●その後 mailsend.php では正常に index2@ に送信される

とならないのはなぜでしょうか。

(まぁこれはどっちみち同一セッションのウィンドウを2つ開くと崩壊する方法なのでおすすめしませんが)

他には、暗号化して埋め込むなどの方法がありますね。

投稿2015/10/28 06:53

tozjp

総合スコア790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpjo

2015/10/28 10:13

分かりにくい説明で申し訳ありません。 ひとまずは、アドバイスいただいた暗号化する方法でしのぐことにしました。 なぜセッションが上書きされないのか、原因は分からないままです。 他者から引き継いだもので、私自身まだ駆け出しなので、もう一度しっかりヒアリングしたいと思います。 本当に助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問