プログラム:ASP(レガシー)
サーバー:windowsサーバー iis
メールフォームの送信ページ複数投稿チェックをしたいと思っています。
入力→確認→送信(エラー等確認後ページ転送)→完了ページ と、なっています。
送信ページに対し不正なアクセスが短時間で複数回あるため送信ページ内で下記の処理をしました。
- 確認ページから渡されたメールアドレス(data_mail)をセッションに登録
- セッションに登録した値を変数(chk_ssn)に登録
- セッションをクリア
- 渡されたメールアドレス(data_mail)と登録した値を変数(chk_ssn)を比較して同じ
また、完了ページからブラウザの「戻る」ボタンを押した場合に、入力ページへ飛ぶようセッション処理をしています(送信→戻る→送信→戻る..をされている形跡があったため)
これらのセッション処理で、自分のPC内であれば思うように動くのですが、本番にアップロードしたところ、完了ページからブラウザの「戻る」ボタンで戻ったところ下記の現象が起きる場合と起きない場合があります(頻繁に起きます)
- 入力ページへ戻らない
- 1の結果確認ページに行くのですが、そこから送信ボタンを押してみると「情報が期限切れです」の処理となる。※確認ページから値を送信した場合は通常の送信を想定しています。※確認ページにセッションの値を表示してみたところ、戻るためのセッションは空欄、メールアドレスは正しく入った状態でした。ブラウザのキャッシュが出ているような状態にも見えます。
サーバ・IISを確認できる環境にないためセッションのタイムアウトの時間が分からないのでSession.Timeout=20を入れています(どこまで影響範囲があるのかわからず全部に入れてみています)。確認している段階では30秒ほどの出来事です。
①本番環境に上げるとセッションがうまく動いていないように感じるのですが何が原因でしょうか
②chrome開発環境のapplication→cookieに登録したセッションIDが表示されません(本番・自分のPC共に)。プログラム・セッションの扱い方が間違っているところがあるでしょうか
サーバ・IISを確認できる環境にないため、プログラム側でできるだけのことがしたいです。また、サーバ管理者に聞いた方がいい事はセッションのタイムアウトの時間以外にありますでしょうか?(ここは回答がくるかどうかわかりませんが..)
よろしくお願い致します。
//入力ページ//////////////////////// Session.Timeout=20 Session.Contents.RemoveAll ・・・略・・・ //確認ページ//////////////////////// Session.Timeout=20 If Session("MODORU") = "end" Then Response.Redirect "入力ページURL" End If Session.Contents.RemoveAll data_mail = Request.Form("data_mail") Session.Contents("USERMAIL") = data_mail <input name="data_mail" type="hidden" class="text" value="<% Response.Write(data_mail) %>" /> //送信ページ//////////////////////// Session.Timeout=20 data_mail = Request.Form("data_mail") chk_ssn = Session("USERMAIL") Session.Contents("USERMAIL") = "" errorcd = 0 If chk_ssn <> data_mail Then errorcd = 3 End If If errorcd = 0 Then ・・・略・・・ ElseIf errorcd = 3 Then Response.Redirect "xxx.asp?prm=3 ’転送 End If //完了ページ//////////////////////// Session.Contents("MODORU") = "end" 「情報が期限切れです」と表示
あなたの回答
tips
プレビュー