<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hopes

    Start Here..

     

    【轉】從判斷Session["UserName"].ToString()為null和""所想到的



    Asp.net安全驗證模式提供了驗證用戶訪問的很好模式,但是還有很多情況下需要我們采用傳統的Session方式來解決用戶登錄驗證問題,比如一些簡單的驗證。今天打開CSDN就發現了一個帖子,該帖子的樓主正在利用這種方式驗證用戶是否登陸,但是在這個過程中出現了錯誤,具體是怎么回事呢?

    原來摟主想寫個方法,該方法功能是判斷用戶是否登陸,如果沒登陸,則自動跳轉到登陸頁面。樓主的具體判斷條件是Session[“username”]是否為空,如果Session[“username”].ToString()為null或者為""則表示未登陸,跳轉到一個提示頁面。具體代碼示例如下:

    public int IsUser()

    {

    if (Session["UserName"].ToString() == null || Session["UserName"].ToString() != null && Session["UserName"].ToString() == "")

    {

    //可能非有意的引用比較;若要獲取值比較,請將左邊轉為類型string

    //Response.Redirect ("../index.aspx");

    //Response.Write(" <script language=javascript> alert('你不是管理員!');location.href='Default.aspx'; </script> ");

    return 1;

    }

    else

    {

    return 0;

    }

    }
    樓主在運行這段代碼的時候,vs2005始終出現提示"當前上下文中不存在session",這個是因為相應的代碼環境和cs文件的位置所決定的,利用System.Web.HttpContext.Current.Session來調用Session即可。如果了解asp.net底層機制,我們就會發現,Session["UserName"],其實是HttpConText的屬性,在aspx文件關聯代碼中,其提升為Page的屬性,所以我們可以如此方便調用,而在非關聯代碼文件中,則必須通過System.Web.HttpContext.Current.Session方式調用。此時改正后的代碼示例如下(不考慮邏輯問題):

    public int IsUser()

    {

    if (System.Web.HttpContext.Current.Session["UserName"].ToString() == null || System.Web.HttpContext.Current.Session ["UserName"].ToString() != null && System.Web.HttpContext.Current.Session ["UserName"].ToString() == "")

    {

    //可能非有意的引用比較;若要獲取值比較,請將左邊轉為類型string

    //Response.Redirect ("../index.aspx");

    //Response.Write(" <script language=javascript> alert('你不是管理員!');location.href='Default.aspx'; </script> ");

    return 1;

    }

    else

    {

    return 0;

    }

    }

    其實,這里還有問題,我們拋開如上問題和其中的邏輯錯誤問題不談,有經驗的程序員,一下子就會看出問題所在。讓我們仔細分析一下,經過如上所說的修正,我們運行程序就會看到異常顯示“未將對象引用設置到對象的實例”的錯誤,然后調試,發現了沒有這個Session,因為還沒有創建,所以更無法使用ToString()。這樣我們明白了,在沒登陸時,Session[“username”] =null,此時條件: Session[“username”].ToString()過程中,會出現異常。我們可以想到,如果把先判斷Session[“username”] 是否為null,再判斷樓主的條件,即可。

    這里有兩種方法,一種是在外層或前面再加一個if語句;另一種是采用&& 和||運算符(詳見邏輯運算符用法),把Session[“username”] ==null放到樓主所寫條件的前面,這是因為采用&& ||運算符并且Session[“username”] ==null在判斷最前,因而程序先判斷Session[“username”] =null,如果不滿足條件,則不會繼續判斷后面的條件,如果滿足條件,則繼續判斷后面的條件,而此時不具備出現異常的情況。采用如上所述方法程序程序會運行通過,無錯誤,符合功能需要(拋棄樓主條件中的邏輯錯誤)。此時修改后的代碼示例(不考慮邏輯問題)如下:

    public int IsUser()

    {

    if ((System.Web.HttpContext.Current.Session["UserName"]==null)||System.Web.HttpContext.Current.Session["UserName"].ToString() == null || System.Web.HttpContext.Current.Session ["UserName"].ToString() != null && System.Web.HttpContext.Current.Session ["UserName"].ToString() == "")

    {

    //可能非有意的引用比較;若要獲取值比較,請將左邊轉為類型string

    //Response.Redirect ("../index.aspx");

    //Response.Write(" <script language=javascript> alert('你不是管理員!');location.href='Default.aspx'; </script> ");

    return 1;

    }

    else

    {

    return 0;

    }

    }

    如上只是解決了運行問題,從好的程序方面考慮,還有兩個問題:

    首先,樓主在處理Session轉換為string類型時也可以采用(string)Session[“username”]的方式,此時Session[“username”]為null時,不會出現錯誤,就可不先判斷Session[“username”]是否為null。

    其次,樓主采用的驗證字符串為null或""的方法很不好,應該采用如下方法:string.IsNullOrEmpty((string)Session["UserName"]),這個方法如果字符串為null或者"",則返回True,否則返回False。此時,很簡潔,而且省去很多判斷。

    綜合以上,這時,可以不判斷Session ["UserName"]值為null的情況(如考慮則有助于減少實際運行時類型轉換的次數),修改后的代碼示例(修正了邏輯問題)如下:

    public int IsUser()

    {

    if (string.IsNullOrEmpty((string) System.Web.HttpContext.Current.Session ["UserName"]))

    {

    //可能非有意的引用比較;若要獲取值比較,請將左邊轉為類型string

    //Response.Redirect ("../index.aspx");

    //Response.Write(" <script language=javascript> alert('你不是管理員!

    posted on 2012-11-06 17:59 ** 閱讀(179) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    收藏夾

    C#學習

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人无遮挡毛片免费看| 8x8×在线永久免费视频| 韩国18福利视频免费观看| 亚洲精品熟女国产| 99久久免费精品视频| 亚洲va久久久噜噜噜久久男同 | 亚洲va中文字幕无码| 亚洲国产精品嫩草影院| 免费涩涩在线视频网| 亚洲精品自偷自拍无码| 特级淫片国产免费高清视频| 亚洲真人无码永久在线观看| 在线观看无码的免费网站| 亚洲爆乳成av人在线视菜奈实| 国产无遮挡又黄又爽免费视频| 色婷婷六月亚洲综合香蕉| 亚洲福利精品电影在线观看| 曰批全过程免费视频免费看| 国产亚洲精品精品国产亚洲综合| 免费在线黄色电影| 亚洲国产精品日韩在线| 午夜时刻免费入口| 国产激情久久久久影院老熟女免费 | 亚洲成a∧人片在线观看无码| 免费在线视频一区| 波多野结衣免费一区视频| 亚洲天堂一区二区三区| 卡1卡2卡3卡4卡5免费视频| 免费的黄网站男人的天堂| 亚洲国产精品一区第二页| 中国xxxxx高清免费看视频| 久操免费在线观看| 在线观看91精品国产不卡免费| 日韩大片在线永久免费观看网站| 亚洲中文字幕无码久久综合网| 国产青草亚洲香蕉精品久久| 黑人精品videos亚洲人| 最近中文字幕mv免费高清视频7| 免费看黄福利app导航看一下黄色录像| 亚洲精品国产美女久久久| 在线观看的免费网站|