標籤

2020年12月24日 星期四

ASP.NET 怎麼保存資訊?Application、Session、Cookie、Cache、ViewState

 摘錄https://ithelp.ithome.com.tw/articles/10222885

HTTP是 Stateless(沒有狀態) 的通訊協定(Protocol),Stateless(沒有狀態)含有以下特色:

  1. 每個Request 都是唯一且獨立的
  2. 不會記住之前的連線

也就是說,每次頁面載入彼此之間都沒有關係。但...這樣太沒感情了!!(不是啦!),這樣有時候其實不太方便。
為了蝦皮雙十一積了半年的購物車,如果從購物車頁面跳轉到結帳頁面,它就像失憶了一樣,完全不記得你的購物車內容!!!!!瞬間是不是非常崩潰!!!!

那有哪些方式可以儲存資訊,讓頁面間彼此共享?
本文將為大家介紹Application、Session、Cookie、Cache以及ViewState。

==============================================================

Application

  • 介紹
    • Application存放在server的記憶體中,當IIS或網頁伺服器重新啟動、修改Global.asax、修改 web.config時, Application的值便會遺失。
    • 因為儲存在伺服器的記憶體中,因此與在資料庫中存儲和檢索資訊相比,它的執行速度更快。
    • Application 的內容所有user都能夠存取,且都存取同一個,是所有user共用的,全域變數的概念,因此可以用來存放少量經常使用,但不會因為使用者不同而變更的資料
    • 存放的資料內容為Object資料型別,讀取時需要轉換為適當的型別使用。例如:Conver.ToInt32(Application["名稱"])。
    • 資料量大小無限制,以server的記憶體大小而定
    • 使用頻率較低,在Asp.Net中類似的資料可以儲存在Web.config檔案中
  • 範例:
    網頁瀏覽次數,無論是誰造訪這個網頁都共同存取同一個變數並+1
  • 相關語法
    由於大家都共用這個變數,避免同一時間有多人同時存取,所以存取Application 狀態資料前,須將Application鎖定,修改後再打開
Application.Lock();//先把Application固定
Application["yoyo"]="大家都看得到這段字喔!";//對Application賦值
Application.UnLock();//把Application打開
string yoyo =Convert.ToString( Application["yoyo"]);//存取時要記得轉型

==============================================================

Session

  • 介紹
    • 存放在server的記憶體中
    • Session的內容鎖定同一瀏覽器,並不是所有user都共用。你打開第一次chrome使用這個網頁,跟把它關掉再用Chrome再開一次,對Session還說是不同user。或者你同時開了Chrome還有IE造訪同一個網頁,也是代表不同user。
    • 預設生命週期為20分鐘(若是持續使用不閒置,可以一直存在),或是直到瀏覽器被關閉才消失。同一瀏覽器只是關掉分頁Session不會消失,換頁面也不會消失,故類似跨網頁的全域變數
    • 存放的資料內容為Object資料型別,讀取時需要轉換為適當的型別使用。例如:Conver.ToInt32(Session["名稱"])。
    • 資料量大小無限制,以server的記憶體大小而定
      -範例:
      傳統的購物車網站傳遞資料的方法。可以把選好的紀錄存在session裡,當跳到結帳頁面時也不會消失。
  • 相關語法
Session["yoyo"]="Hiyoyo";//賦值Session["yoyo"]
Session.Timeout = 30;//更改Session過期時間
Session.Remove("yoyo");//移除 Session["yoyo"]的值
Session.RemoveAll();//移除所有Session變數
Session.Clear(); //移除所有Session變數
Session.Abandon();//移除 session 的所有變數,且會觸發 Session_End 事件,把 Session["yoyo"]整個砍了

你可以試試把值存到Session以及Application,然後開啟不同瀏覽器看看畫面變化喔~

==============================================================

Cookie

  • 介紹
    • 是放在Web Server和瀏覽器之間,伴隨request和網頁傳送的一小段文字
    • 存放在使用者電腦
    • cookies存在時間通常為1000分鐘,也可以自行設定
    • 資料量大小最大為4096 bytes,實際一個瀏覽器可以儲存的cookie數量及大小受限於瀏覽器設定
    • 每個Cookie需要有唯一的名稱,若名稱相同會覆蓋過去
    • String格式存放
    • 使用者"每次"發請求都會夾帶 Cookie,會影響訪問網站的速度
  • 相關語法
HttpCookie yoCookie = new HttpCookie("test");//用new宣告一個型別為HttpCookie的yocookie
yoCookie.Value = Server.UrlEncode("我是內容");//通常寫入cookie的值會加密,所以加密後賦值
yoCookie.Expires = DateTime.Now.AddDays(2);//設定2天後過期
Response.Cookies.Add(yoCookie);//寫到用戶端

HttpCookie readCookie = Request.Cookies["test"];//用request讀取
Response.Write("cookie內容 : " + Server.UrlDecode(readCookie.Value));

也可以在單一cookie中儲存多的名稱/值組。增加設定方便性以及減少cookie的數量及大小

//方法一
Response.Cookies["test"]["username"] = "I'm Cynthia";
Response.Cookies["test"]["gender"] = "女";
//方法二           
HttpCookie yoCookie = new HttpCookie("test");
yoCookie.Values["username"] = "I'm Cynthia";
yoCookie.Values["gender"] = "女";

==============================================================

Cache

  • 介紹
    • 儲存在伺服器記憶體
    • 所有瀏覽者在同一時間共用同一個變數
    • Cache自己設定時間,時間到消失,不受網頁關閉或關機影響
    • 通常應用在靜態網頁快取以及入口型網站
    • 目的是希望可以減少對資料庫的存取

-範例:
當有一個入口網站,內容不會頻繁變動,但是頁面上有許多資訊需要從資料庫抓取,每個人點進來就要重新抓取並載入一次,其實非常消耗流量跟資源。於是我們將輸出結果存到Cache裡,並設定6小時或合適的時間。當第一個人進到頁面時,(被迫)佛心的幫大家把結果載完並存到cache,接下來6個小時內進來這個頁面的人都不用重新載入就能看到跟第一個人一模一樣的頁面。一直到6小時時間到,下一個人再繼續扮演(被迫)佛心的好孩子。有客怨也只有第一個人會抱怨呵呵

  • 相關語法
//存放資訊
Cache["yoyo"] = "1000";
//存放資訊
Cache.Insert("yoyo", "1000");
//讀取資訊
String UserNameID = Cache["yoyo"].ToString();

==============================================================

ViewState

  • 介紹

    • ViewState 屬性提供一個字典物件,用於在對同一頁的多個請求(request)之間保留值。
    • 用來存放ASP.NET頁面上控制項的狀態值給兩個連續的postback使用
    • 要傳遞的變數會存放在隱藏表單欄位(hidden field)的值(Value)屬性中( _ VIEWSTATE)
      <input Type="Hidden"...>
      
    • 不需要伺服器資源,ViewState包含在頁面程式碼的結構中
    • ViewState的值會經過雜湊、壓縮,並且透過Base-64編碼後才存入欄位內
    • 只能在同一頁面裡存在,無法跨網頁
    • 可存放可序列化的Object
    • 不是用存放大量資料,網頁載入可能會太久
    • 若要關閉ViewState,需關閉 @page 裡面設定EnableViewState=false
  • 相關語法

ViewState["Text"] = "123";//賦值
string myValue = ViewState["Text"].ToString();//取值

==============================================================

比較表

變數變數儲存位置生命週期資料量大小
Application所有瀏覽者共用同一個伺服器記憶體不關伺服器就一直存在任意
Session一個瀏覽器一個伺服器記憶體關掉瀏覽器就消失(關掉分頁不會)。也可設定存活時間(預設為20分鐘)小量
Cookie一個瀏覽者一個使用者電腦通常存在1000分鐘,也可以自己設時間小量
Page.Cache所有瀏覽者在同一時間共用同一個伺服器記憶體自己設定時間,時間到消失,不受網頁關閉或關機影響任意
ViewState一個頁面(aspx)同一個用戶端該頁面的生命週期小量

==============================================================

2020年12月7日 星期一

修改Windows的登入密碼


參考
Reset a Windows 10 password
Post author: Nat Lee
Post link: http://NatLee.github.io/Blog/2016/01/31/20160131_Crack_Windows_Password/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
# Windows

圖形化界面的置換修改法
  1. 插入Windows7安裝光碟
  2. 進入安裝畫面後,按下下一步再按修復您的電腦
  3. 按下載入驅動程式
  4. 進到windows\system32目錄底下
  5. Magnify.exe改名成Magnify1.exe
  6. cmd.exe改名成Magnify.exe



  7. 重新啟動電腦
  8. 進入登入畫面按左下角協助工具選擇放大鏡


  9. 輸入net user 你的帳戶 123後按Enter把密碼改成123
  10. 重新啟動進到光碟裡把放大鏡跟cmd改回原本名字




指令置換修改法
  1. 插入Windows7安裝光碟
  2. 進入安裝畫面後,按下Shift+F10
  3. 輸入cd\後按Enter跳至系統槽(可能C或D)
  4. 輸入cd windows\system32後按Enter跳到目錄底下
  5. 輸入ren Magnify.exe Magnify1.exe後按Enter把放大鏡改名
  6. 輸入ren cmd.exe Magnify.exe後按Enter把cmd改成放大鏡
  7. 關閉Command Window後重新啟動電腦
  8. 進入登入畫面按左下角協助工具選擇放大鏡
  9. 輸入net user 你的帳戶 123後按Enter把密碼改成123
  10. 輸入cd\後按Enter跳至系統槽(可能C或D)
  11. 重新啟動進到光碟後按下Shift+F10
  12. 輸入cd windows\system32後按Enter跳到目錄底下
  13. 輸入ren Magnify.exe cmd.exe後按Enter把cmd改回來
  14. 輸入ren Magnify1.exe Magnify.exe後按Enter把放大鏡改回來
  15. 重新啟動電腦即完成,密碼為123
重點:就是把放大鏡跟CMD互換

Windows 8/8.1/10

  1. 插入Windows10安裝光碟
  2. 進入安裝畫面後,按下Shift+F10
  3. 輸入以下指令後按Enter把utilman.exe改名加尾綴.bak
    move d:\windows\system32\utilman.exe d:\windows\system32\utilman.exe.bak
  4. 輸入以下指令後按Enter把cmd.exe改名成utilman.exe
    copy d:\windows\system32\cmd.exe d:\windows\system32\utilman.exe

  5. 關閉Command Window後重新啟動電腦

  6. 進入登入畫面按協助工具(左下角或右下角)
  7. 輸入net user 你的帳戶 123後按Enter把密碼改成123
  8. 重新啟動進到光碟後按下Shift+F10
  9. 依序輸入以下指令把檔案換回來
    move d:\windows\system32\utilman.exe d:\windows\system32\cmd.exe
    move d:\windows\system32\utilman.exe.bak d:\windows\system32\utilman.exe
  10. 重新啟動電腦即完成,密碼為123

這邊要注意一下,這個方法僅限系統管理員Account非Microsoft帳號
如果你的系統管理員身份是M$帳號的話
請在第七步時把指令改成net user 你要新增的帳戶 /add
這樣就可以進到有管理權限的帳戶來改掉原本進不去的帳戶密碼了

後記

Win10換完檔案後,其實可以用輸入wpeutil reboot重啟

不過改密碼的方法一樣都是置換法,總之能開cmd的話萬事都OK。
感謝收看


使用 DiskSpd 測試磁碟效能

  DiskSpd 是微軟創建的命令行磁碟測試工具。它結合了強大的IO工作負載定義來測量磁碟效能。由於它支援自由配置和調整參數,使其成為存儲效能測試、驗證和基準測試的理想工具。 步驟 1. 從 GitHub (說明) https://github.com/Microsoft/di...