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

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

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

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

Q&A

0回答

712閲覧

セッションがブラウザの戻るボタンで思うように動かない(メールフォーム重複送信対策)レガシーASP

tso

総合スコア16

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ASP

ASP(Active Server Pages) あるいはClassic ASP (ASP Classic)は、マイクロソフト社開発した動的なウェブページ製作に利用可能なサーバー側のスプリクトエンジンです。

0グッド

0クリップ

投稿2022/04/24 03:16

プログラム:ASP(レガシー)
サーバー:windowsサーバー iis

メールフォームの送信ページ複数投稿チェックをしたいと思っています。
入力→確認→送信(エラー等確認後ページ転送)→完了ページ と、なっています。

送信ページに対し不正なアクセスが短時間で複数回あるため送信ページ内で下記の処理をしました。

  1. 確認ページから渡されたメールアドレス(data_mail)をセッションに登録
  2. セッションに登録した値を変数(chk_ssn)に登録
  3. セッションをクリア
  4. 渡されたメールアドレス(data_mail)と登録した値を変数(chk_ssn)を比較して同じ

また、完了ページからブラウザの「戻る」ボタンを押した場合に、入力ページへ飛ぶようセッション処理をしています(送信→戻る→送信→戻る..をされている形跡があったため)


これらのセッション処理で、自分のPC内であれば思うように動くのですが、本番にアップロードしたところ、完了ページからブラウザの「戻る」ボタンで戻ったところ下記の現象が起きる場合と起きない場合があります(頻繁に起きます)

  1. 入力ページへ戻らない 
  2. 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" 「情報が期限切れです」と表示

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問