ASP.NET実装ログイン後要求ページに戻る
6277 ワード
前提:Webプログラミングではログイン後にアクセスする必要があるページがあるので、session、Cookiesなどのページがアクセスを許可するかどうかを制御するためにベースクラス(Adminbasepage)を作成しました.アクセスできない場合は、自動的にログインページに移動します.私が書いたログインページはまた固定ページに移動したので、問題が来ました.前回要求したページにどうやって移動しますか?
1.まずはRequestを使ってみました.UrlReferrer
(1)まずLoadイベントに次のコードを書く.
(2)ログインイベントに次のコードを書く
表面的には実現できるはずですが、実はそうではありません.私のベースクラスはPreLoadイベントでSession、Cookiesなどの情報を判断し、存在しない場合はログインページに移動します.ページのLoadイベントを要求する前にログインページに移動し、Request.UrlReferrerの値は空です.stswordmanのブログを参考にして、彼はこう書いた.
Requestを使用しています.UrlReferrerの場合は、次の点に注意してください.
//<![CDATA[
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = true;
var cb_blogId = 17632;
var cb_entryId = 423910;
var cb_blogApp = "stswordman";
var cb_blogUserGuid = "4751360b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2006/6/12 14:50:00';
//]]> (1).前のページでdocumentを使用した場合.現在のページに移動します.UrlReferrerは空の値を返します
(2).A,Bの2ページがあれば、ブラウザで直接Aページを要求し、Aページの中でPage_LoadイベントでBページに移動するとRequest.UrlReferrerは空を返します.Page_にいるからloadイベントではページが初期化されていないため、現在のページの情報を記録することができず、Bページに移動しても前のページの情報を取得できません
(3).リフレッシュボタンをクリックしてもRequestは変わりません.UrlReferrer
この方法はだめだからRequestを採用することにした.QueryStringはこの問題を解決します.
2.Requestを採用する.QueryString
この方法の鍵は,要求ページのUrlをどのように取得し,その後そのページのURlをログインページに転送し,ログインに成功した後にそのUrlに移動させるかである.
(1)検証ベースクラス(Adminbasepage)に次のコードを書く
(2)ログインページのログインイベントの最後にジャンプを実現
ここで注意しなければならないのは、サーバーを使用している場合です.UrlEncode()は、サーバを復号することを忘れないでください.UrlDecode().この方法が実現できる以上,要求ページのURLを登録ページに転送し,Session,Cookiesでも実現できる.その他の値伝達方法--Click Here!
1.まずはRequestを使ってみました.UrlReferrer
(1)まずLoadイベントに次のコードを書く.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.UrlReferrer!=null)
{
ViewState["UrlReferrer"]=Request.UrlReferrer.ToString();
}
}
}
(2)ログインイベントに次のコードを書く
protected void Signin()
{
//
/**************************
* ......
***************************/
if (ViewState["UrlReferrer"]!=null)
{
//
Response.Redirect(ViewState["UrlReferrer"].ToString());
}
else
{
//
Response.Redirect("Default.aspx");
}
}
表面的には実現できるはずですが、実はそうではありません.私のベースクラスはPreLoadイベントでSession、Cookiesなどの情報を判断し、存在しない場合はログインページに移動します.ページのLoadイベントを要求する前にログインページに移動し、Request.UrlReferrerの値は空です.stswordmanのブログを参考にして、彼はこう書いた.
Requestを使用しています.UrlReferrerの場合は、次の点に注意してください.
//<![CDATA[
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = true;
var cb_blogId = 17632;
var cb_entryId = 423910;
var cb_blogApp = "stswordman";
var cb_blogUserGuid = "4751360b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2006/6/12 14:50:00';
//]]> (1).前のページでdocumentを使用した場合.現在のページに移動します.UrlReferrerは空の値を返します
(2).A,Bの2ページがあれば、ブラウザで直接Aページを要求し、Aページの中でPage_LoadイベントでBページに移動するとRequest.UrlReferrerは空を返します.Page_にいるからloadイベントではページが初期化されていないため、現在のページの情報を記録することができず、Bページに移動しても前のページの情報を取得できません
(3).リフレッシュボタンをクリックしてもRequestは変わりません.UrlReferrer
この方法はだめだからRequestを採用することにした.QueryStringはこの問題を解決します.
2.Requestを採用する.QueryString
この方法の鍵は,要求ページのUrlをどのように取得し,その後そのページのURlをログインページに転送し,ログインに成功した後にそのUrlに移動させるかである.
(1)検証ベースクラス(Adminbasepage)に次のコードを書く
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.PreLoad += new EventHandler(BaseValidate);
}
protected void BaseValidate(object sender, EventArgs e)
{
if (Request.Cookies["manager"] != null)
{
// To do someting your want
}
else
{
string PermissionUrl = VirtualPathUtility.ToAppRelative(Request.Url.AbsolutePath);//
Response.Redirect("Signin.aspx?purl=" + Server.UrlEncode(PermissionUrl));
}
}
(2)ログインページのログインイベントの最後にジャンプを実現
if (Request.QueryString["purl"] == null)
{
Response.Redirect("Default.aspx");
}
else
{
Response.Redirect(Server.UrlDecode(Request.QueryString["purl"].ToString()));
}
ここで注意しなければならないのは、サーバーを使用している場合です.UrlEncode()は、サーバを復号することを忘れないでください.UrlDecode().この方法が実現できる以上,要求ページのURLを登録ページに転送し,Session,Cookiesでも実現できる.その他の値伝達方法--Click Here!