- PR -

[ASP.net]ページ制御

投稿者投稿内容
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-04-21 13:03
引用:

認証情報をSession変数で保持していますので、
それで判断するように変更しました。
しかし、ログインページ以外のページを直接URLで指定し
アクセスすると、ごくまれですが、
ログインページにリダイレクトされず、
そのままそのページにアクセスできてしまうという
現象が起こります。


その部分周辺のコードがあればなにかわかるかも。

_________________
たつごろー
codeseek
こみゅぷらす
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2005-04-21 13:36
たつごろーさん、返信ありがとうございます。

コードはこんな感じです。

private static Login login;

private void Page_Load(object sender, System.EventArgs e)
{
login = (Login)Session["Login"];
if(login==null)
{
Response.Redirect("Login.aspx");
}
}

Login.csというクラスファイルがあり、
ログイン時に認証OKであれば、
Loginクラスに社員コード、社員名等を入れ、
セッションでクラスを保持しています。
各画面のPageLoadイベントでこのセッションが
あるか確認するようにしました。

今自分でコードを見て一つ気づいたのですが、
毎回PageLoadイベントでこの処理を行なうのではなく、
if(!IsPostBack)で、ポストバックではないときのみ
この処理を行なったほうがいいのでしょうか。

宜しくお願いします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-04-21 14:20
認証画面に飛ばなかったのは、同じIEのインスタンスを気づかないまま使ったからではないでしょうか。
そうだとすると、Sessionはそれらで共有されますので、当然そういう挙動になります。
IEから[ファイル]->[新規作成]->[ウィンドウ]
で作った新しいウィンドウから再現できるはずです。

引用:

private static Login login;



ASP.NETでは、staticは使わないほうがいいです。

引用:

if(!IsPostBack)で、ポストバックではないときのみ
この処理を行なったほうがいいのでしょうか。


そう思うだけの知識があるのですから、たぶん、そうしたほうがいいと思います。
この部分は、前後関係や設定にかかわるので、単純な回答ができないところです。

_________________
たつごろー
codeseek
こみゅぷらす
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2005-04-21 14:53
たつごろーさん、返信ありがとうございます。

引用:

認証画面に飛ばなかったのは、同じIEのインスタンスを気づかないまま使ったからではないでしょうか。
そうだとすると、Sessionはそれらで共有されますので、当然そういう挙動になります。
IEから[ファイル]->[新規作成]->[ウィンドウ]
で作った新しいウィンドウから再現できるはずです。



ということは、新しいウィンドウから実行すれば、
理屈上、認証画面に必ず飛ぶということでしょうか。。。?

引用:

ASP.NETでは、staticは使わないほうがいいです。



・・・それは何ゆえにですか?
private Login login;
に変更した方がいいのでしょうか。。。?

引用:

引用:

if(!IsPostBack)で、ポストバックではないときのみ
この処理を行なったほうがいいのでしょうか。


そう思うだけの知識があるのですから、たぶん、そうしたほうがいいと思います。
この部分は、前後関係や設定にかかわるので、単純な回答ができないところです。



通常、一般論として、セッションを使用した認証はポストバック
ではない場合にするのでしょうか。

質問攻めですみません。。。

[ メッセージ編集済み 編集者: hana 編集日時 2005-04-21 14:54 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-04-21 15:11
引用:

ということは、新しいウィンドウから実行すれば、
理屈上、認証画面に必ず飛ぶということでしょうか。。。?


私から「必ず」という保障はできません。
ざっと検索したものだけど、このへんを読むといいかも。
http://support.microsoft.com/default.aspx?scid=kb;ja;300883

お勧めの本
.NETエンタープライズWebアプリケーション開発技術大全シリーズ
〈Vol.3〉ASP.NET応用編
http://www.codeseek.net/think/OsusumeBook.htm

引用:

引用:

ASP.NETでは、staticは使わないほうがいいです。



・・・それは何ゆえにですか?


では、逆に質問、
なぜstaticにしたのですか。

ASP.NETでのstaticについては、過去ログにも議論がありますので、検索してみてはいかがでしょう。

引用:

private Login login;
に変更した方がいいのでしょうか。。。?


いいえ。そう断言できません。
そのプログラム全体もかかわってきます。
ただ、いえることは、変数のスコープと生存期間は、適切な範囲でかつ小さいほうがよい、ということ。

引用:

通常、一般論として、セッションを使用した認証はポストバック
ではない場合にするのでしょうか。


いいえ。
ポストバックされたときにもSessionが残っているとは断言できないからです。

引用:

質問攻めですみません。。。


回答は自分自身のためにしていますので、質問は大歓迎なんです。

_________________
たつごろー
codeseek
こみゅぷらす
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-04-21 18:00
あと、Sessionにいれるのは、プリミティブ型か、シリアル化できるオブジェクトの方がよいです。

_________________
たつごろー
codeseek
こみゅぷらす

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