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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

1557閲覧

WebFormで遅延をかけた後に画面遷移したい。

Holly_ragi

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/12/13 01:45

今年から、プログラムを学び始めたものです。
ASP.NETでSQLServerを使ったデータ管理システムを作成しています。
管理画面でタイムアウトした際に、タイムアウト画面を経由してログイン画面に遷移したいと思っています。
分からない時の調べ方がまだ板についておらず、いろいろなサイトを参考にしてみたのですが、上手く動作しません。
Webフォームの場合、タイムアウト画面表示後に5秒間遅延をかけてリダイレクトの処理をしているのですが、遅延とリダイレクトが共存できません。
public partial class Timeout : System.Web.UI.Page
{
static void main(string args)
{
var lr = new LoginRoot();

DelaySample(); lr.LoginRoot(); } static async void DelaySample() { for (int i = 0; i < 5; i++) { await Task.Delay(1000); } } protected void LoginRoot() { Response.Redirect("LogIn.aspx"); } }

LoginRoot()を参照する際にオブジェクトエラーが発生してしまいます。
幼稚な質問だとは思いますが、ご教授いただければ幸いです。
また、参考になるサイトや調べ方のコツなどもアドバイスいただけると嬉しいです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/13 23:09

このスレッドは先に削除依頼してたのが運営に拒否されたかで復活したのですよね? 質問者さんは Q&A を続ける気があるのでしょうか?
guest

回答1

0

このスレッドは先に削除依頼してたもので、質問者さんは Q&A を続ける気はなさそう、かつ、不明点を聞いても返事は返ってきそうもないので勝手に想像して勝手に回答しておきます。

質問のコードを拝見すると、はっきり言って文法レベルでコードがメチャクチャで、ASP.NET どころか C# の文法などの基本的な知識も不足しているようです。なので、回答しても今は理解できないと思いますが、そのあたりは今後勉強してもらえると期待します。

管理画面でタイムアウトした際に、タイムアウト画面を経由してログイン画面に遷移したいと思っています。

その「タイムアウト」というが何だか不明ですが、ASP.NET Web アプリのフレームワークに備わっているフォーム認証または ASP.NET Identity 利用した認証で、認証チケットの有効期限が切れた状態と理解します。

上記の認証方式はいずれもクッキーを利用しており、ログインに成功すると認証チケットが入ったクッキーが送られ、その後はクッキーに認証チケットを入れて要求毎にサーバーに送信するので認証状態が継続されるという仕組みになっています。

そして、質問者さんの言う「タイムアウト」とは、例えば、一旦認証を受けたユーザーが、ログオフせず、ブラウザを立ち上げたまま長時間席を外すなどして、タイムアウトに設定した時間を超えてアクセスしなかった状況であろうと想像しています。

その場合、ユーザーが席に戻ってきて再度アクセスすると、クッキーは送信されるが中の認証チケットが期限切れなので、アクセスしたページに匿名アクセスを許可してなければ、ログイン画面にリダイレクトされるというのがデフォルトの動きです。

そこを、いきなりログイン画面にリダイレクトするのではなく、ユーザーに認証チケットが期限切れとなっていることを知らせる画面に遷移した後、何秒か経った後で自動的にログイン画面に遷移させたいので、それをどのように実現できるかがこのスレッドの質問と想像してます。

「タイムアウト」=「一旦認証を受けたが認証チケットが期限切れ」ということなので、認証チケットが期限切れになっていることを調べる必要があります。それはサーバー側で以下の条件で判定できます。

(1) 要求 HTTP ヘッダーに認証クッキーが含まれる。
(2) 認証クッキーの中の認証チケットが期限切れ。

認証クッキーと認証チケットは違うことに注意してください。クッキーはチケットの入れ物に過ぎません。認証チケットの有効期限は、認証クッキーの中に入っている情報の一つです。また、クッキーが送られてきても中のチケットが期限切れということはあります。

認証クッキーを取得して、その中の認証チケットを取得し、認証チケットが期限切れか否かを判定できます。詳しくは以下の記事を見てください。前者が従前のフォーム認証の場合、後者が ASP.NET Identity を利用した認証の場合です。

Forms 認証のタイムアウト判定
http://surferonwww.info/BlogEngine/post/2010/07/30/Judging-expiration-of-Forms-authentication-ticket.aspx

ASP.NET Identity タイムアウト判定
http://surferonwww.info/BlogEngine/post/2020/10/23/judging-expiration-of-authentication-ticket-ussued-by-aspnet-identity.aspx

上の記事では、ログイン画面上に認証チケットが期限切れであることのメッセージを表示しています。それでよければほぼそのままで使えると思います。

そうではなくて、やはり「タイムアウト」を知らせる通知画面を表示してからログイン画面に遷移させたいということであれば、上の記事でメッセージを書き込むところで通知画面にリダイレクトして、その通知画面で JavaScript などを用いて指定時間後にログイン画面に遷移するようにすればよさそうです。

通知画面からログイン画面への移動は「url 自動 転送」などをキーワードにググってください。参考になる記事が多々ヒットするはずです。

投稿2021/12/14 02:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問