- PR -

Page_Load を通らない

投稿者投稿内容
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-12-02 12:58
Page_Load を通らない理由がわからないので質問させて頂きます。

Page_Loadは必ず、通るとネットで調べても書いてあるのですが、通らないので困っています。
流れは
1.A画面からB画面のログインページURL+クエリ文を送り、Bに跳ぶ
2.Bでは、Page_Load処理で、クエリ文が来た場合は、ページが表示されえる前に
  ログイン認証を行う
3.ログイン認証後に、タイトルページに跳ぶ
4.ログイン認証時に、クエリ文より引き出してセッションに入れた値をチェックして
  様々な画面に飛ぶ

となっています。
問題点は、一回目に上記の流れを行った場合は、ログインページでのPage_Loadで処理を行い、続いていくのですが、表示されたB画面を閉じて、再度同じ流れをおこなうと、ログインできないユーザIDなどでもログイン出来てしまいます。

で、調べると、二回目はPage_Loadを通っていないことが判明しました。
なぜか、ログイン認証をすっ飛ばしてタイトルページに跳んでしまいます。

この現象は、キャッシュを読み込んでいるからなのかなどと思っているのですがどうしてなのか良く分かりません。どのように検討だてていけばいいのかアドバイスをいただければと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-02 13:38
必ず通る、なんて、どこに書いてありました?


http://homepage3.nifty.com/dotnetfan/web/web07.html
とりあえずここと、

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7744&forum=7
これと、
それぞれで参考としてあげてあるところを読んでみてください。


【追加】
 それとは別に、ログイン認証はweb.configの設定でやる方がよいのでは?

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-12-02 13:39 ]
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-12-02 14:14
Jittaさんご返答ありがとうございます。
-------------------------------------------------------------------------------
セッション イベントはアプリケーション イベントと似ています (Session_OnStart イベントと Session_OnEnd イベント) が、アプリケーション内の固有のセッションについて発生します。セッションは、ユーザーがアプリケーションに対して最初にページを要求したときに開始し、アプリケーションがセッションを明示的に閉じるか、またはセッションがタイムアウトしたときに終了します。
-------------------------------------------------------------------------------
これがヒントになりました。

セッションがサーバサイドのものであり、ブラウザの閉じるがクライアントであるため、ブラウザを閉じただけでは、セッションは切れないんですね。
考えてみると、インターネットでも、ブラウザを閉じて、一時間後にそのページに行ったらまだログインされていたなんてことがあるぺーじもあったのでそういうことかなと思いました。

なので流れとして、
一回目に画面を表示した後、ブラウザを閉じるのではなく、ログアウト処理をおこなうことにより、セッションを切ることが出来、Page_Loadをすっとばすことなくログイン認証が出来ました。

ただ、ユーザーが必ずしもログアウトしてブラウザを閉じるとは限らないので、ブラウザを閉じただけでセッションが切れる方法はないものでしょうか?

<%@ Page language="c#" AutoEventWireup="true"%>
については、上記の問題があるため、解決には至りませんでした。

追加で質問のですが、Page_Loadが最初に読み込まれると思うのですが、それより前に読み込まれるものってあるのでしょうか?
ダンクーガ
常連さん
会議室デビュー日: 2003/03/14
投稿数: 48
お住まい・勤務地: 千葉県
投稿日時: 2003-12-02 14:58
引用:

たけくんさんの書き込み (2003-12-02 14:14) より:

追加で質問のですが、Page_Loadが最初に読み込まれると思うのですが、それより前に読み込まれるものってあるのでしょうか?



こんにちわ、私が以前色々とデバッグした所通常は最初にPage_Initが呼ばれてその後Page_Loadが呼ばれているようですが。

ダンクーガ
常連さん
会議室デビュー日: 2003/03/14
投稿数: 48
お住まい・勤務地: 千葉県
投稿日時: 2003-12-02 15:01
http://homepage3.nifty.com/dotnetfan/web/web07.html

デフォルトの状態では上記サイトにあるような順番で呼ばれるようですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-02 15:42
引用:

ダンクーガさんの書き込み (2003-12-02 15:01) より:
http://homepage3.nifty.com/dotnetfan/web/web07.html

デフォルトの状態では上記サイトにあるような順番で呼ばれるようですね。


順番の元ネタは、おそらくこれ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconcontrolexecutionlifecycle.asp

で、図にしてみました。
http://quick-tips.hp.infoseek.co.jp/asp.net/eventorder.png
ここにイメージ張れるのですが、でかいので。


> ただ、ユーザーが必ずしもログアウトしてブラウザを閉じるとは限らないので、
> ブラウザを閉じただけでセッションが切れる方法はないものでしょうか?
 あれぇ?私のやり方がまずいのかなぁ?そうしたかったのに、ブラウザを閉じるとセッションが「別のもの」になってしまうんですよねぇ・・・
#エージェント(ブラウザ)の「終了」を、サーバが知る手だてはありません

参考にしたところ〜〜〜
プログラミングASP.NET
― ASP.NETによるWebアプリケーション実践開発講座 ―
第17回 ASP.NETにおける認証と認定
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet17/aspnet17_01.html
〜〜〜18回、19回も参照
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-12-03 09:24
この問題について解決しました。解決した理由について書きたいと思います。

先ず、Page_Loadがされないことについてですが、これはLogin認証の部分をまったく通っていなかったからです。
理由としては、
1.システムのページへ移動する
2.ログインしたという情報がセッションに入っていない場合は
  ログイン認証のページに跳ぶ(Jittaさんの言われる通りWeb.configで定義してある)
3.ログイン認証を行う
4.所定のページに跳ぶ
5.ブラウザを閉じる
6.再度、システムのページへ移動する
  注意 ここで、システムのページへ跳ぶと、タイムアウトしていなければ、ログインされ
     ていると処理されるので、違うユーザでログインしたとしても前のユーザでログイ
     ンできてしまう。

この部分で、確実にログイン認証を行うURLにページをとばしていなかったので、前のユーザのままでログインされていたのでした。その為、ログイン認証のPage_Loadに跳ぶわけもないのです。

結果としまして、自分が.Netでのログイン認証の方法を知らなかったことが原因でした。

で、ログイン認証の考え方について質問なのですが、
.netでは、ログイン認証はどのような考え方で作られているのでしょうか?
また、ログイン認証でも、人間が直に手打ちでURLを入れる場合(あいまいな場合がある)、他システムから直URLで入る場合。ブラウザを閉じて再度ログインする場合の認証ほうほうについて、考え方などを教えていただければ嬉しいです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-03 11:19
引用:

たけくんさんの書き込み (2003-12-03 09:24) より:
6.再度、システムのページへ移動する
  注意 ここで、システムのページへ跳ぶと、
     タイムアウトしていなければ、
     ログインされていると処理されるので、
     違うユーザでログインしたとしても
     前のユーザでログインできてしまう。

この部分で、確実にログイン認証を行うURLにページをとばしていなかったので、前のユーザのままでログインされていたのでした。その為、ログイン認証のPage_Loadに跳ぶわけもないのです。


ここ、よくわからないのですが。
引用:

2.ログインしたという情報がセッションに入っていない場合は
  ログイン認証のページに跳ぶ
  (Jittaさんの言われる通りWeb.configで定義してある)
3.ログイン認証を行う


ここにもかかってくると思うのですが、web.configや、その他の認証部分をどのように定義していますか?

私の方は、前回提示した「プログラミングASP.NET」の第19回を元にしています。

スキルアップ/キャリアアップ(JOB@IT)