各種對象和一些檔案理解

來源:互聯網
上載者:User
1.global.asax

Global.asax 檔案(也稱為 ASP.NET 應用程式檔案)是一個可選的檔案,該檔案包含響應 ASP.NET 或HTTP模組所引發的應用程式層級和會話層級事件的代碼。Global.asax 檔案駐留在 ASP.NET 應用程式的根目錄中。運行時,分析 Global.asax 並將其編譯到一個動態產生的 .NET Framework 類,該類是從HttpApplication基類派生的。配置 ASP.NET,以便自動拒絕對 Global.asax 檔案的任何直接的 URL 請求;外部使用者不能下載或查看其中的代碼。Global.asax 檔案是可選的。只在希望處理應用程式事件或會話事件時,才應建立它.
Global.asax檔案主要用來處理更進階別的應用程式事件,如Application_Start、Application_End、Session_Start、Session_End等。開發人員使用位於特定Web應用程式根目錄下的Global.asax檔案來創作此邏輯。第一次啟用或請求應用程式命名空間內的任何資源或URL時,ASP.NET會將其Global.asax檔案編譯為從HttpApplication類派生而來的一個類。

global.asax的方法介紹:

Global.asax.cs中的方法的含義
Application_Init:在每一個HttpApplication執行個體初始化的時候執行
Application_Disposed:在每一個HttpApplication執行個體被銷毀之前執行
Application_Error:所有沒有處理的錯誤都會導致這個方法的執行
Application_Start:在程式初始化的時候執行。在Web應用程式的生命週期裡就執行一次,這裡只能放一些公用的資訊,比如HttpApplicationState。
Application_End:應用程式結束時,在最後一個HttpApplication銷毀之後執行。對應Application_Start,在整個生命週期裡面也是只執行一次。
Session_Start:會話開始時執行。
Session_End:會話結束或到期時執行。
Application_BeginRequest:BeginRequest是在收到Request時第一個觸發的事件,這個方法第一個執行。
Application_AuthenticateRequest:當安全模組已經建立了目前使用者的標識後執行。
Application_AuthorizeRequest:當安全模組已經驗證了目前使用者的授權時執行。
Application_ResolveRequestCache:當ASP.NET完成授權事件以使緩衝模組從緩衝中為請求提供服務時發生,從而跳過處理常式(頁面或者是WebService)的執行。這樣做可以改善網站的效能,這個事件還可以用來判斷本文是不是從Cache中得到的。
Application_AcquireRequestState:當ASP.NET擷取當前請求所關聯的目前狀態(如Session)時執行。
Application_PreRequestHandlerExecute:當ASP.Net即將把請求發送到處理常式對象(頁面或者是WebService)之前執行。這個時候,Session就可以用了。
Application_PostRequestHandlerExecute:當處理常式對象工作完成後執行。
Application_ReleaseRequestState:在ASP.NET執行完所有請求處理常式後執行。ReleaseRequestState事件將使目前狀態資料被儲存。
Application_UpdateRequestCache:在ASP.NET執行完處理常式後為了後續的請求而更新響應緩衝時執行。
Application_EndRequest:同上,EndRequest是在響應Request時最後一個觸發的事件,這個方法自然就是最後一個執行的了。
Application_PreSendRequestHeaders:向用戶端發送Http標題之前執行。
Application_PreSendRequestContent:向用戶端發送Http本文之前執行。
Request相應的事件執行順序:
1.BeginRequest
2.AuthenticateRequest
3.AuthorizeRequest
4.ResolveRequestCache
5.AcquireRequestState
6.PreRequestHandlerExecute
7.PostRequestHandlerExecute
8.ReleaseRequestState
9.UpdateRequestCache
10.EndRequest

注釋:這個檔案是可以滿足一些應用程式級代碼的邏輯需求。

void Application_Start(object sender, EventArgs e)  
{

 

}
是只有在第一次啟動並執行時候才執行,在整個應用程式周期只執行一次,當重啟後IIS不一定會執行,IIS還把資料儲存在記憶體中?只有修改了檔案,再接到第一個請求的時候會執行。所以當這個已經執行過一遍,後面不管誰發起訪問都不會再執行這個事件。

如果你需要每個發起每個人每個訪問都運行那麼應該寫到
void Session_Start(object sender, EventArgs e)  

  HttpContext.Current.Session.Timeout = Convert.ToInt32(ConfigurationManager.AppSettings["SessionTimeOut"]);

 }

2.COOKIE

這個儲存在用戶端的資訊,使用者清除了本機上的COOKIE檔案或到期了就沒有了。

儲存在用戶端,通過 Expries 設定有效期間(可長可短,預設關閉瀏覽器cookie即失效)。

建立項並賦值

Response.Cookies["ckName"].Value = "Sutdent";

 

Response.Cookies["ckName"].Expires = DateTime.Now.AddSeconds(10); // 如果不設定到期時間,預設關閉瀏覽器該cookie即失效

建立項,為不同子鍵賦值

Response.Cookies["ckAge"]["boy"] = "25";

Response.Cookies["ckAge"]["girl"] = "22";

Response.Cookies["ckAge"].Expires = DateTime.Now.AddHours(1);

// Response.Cookies["ckAge"].Expires = DateTime.Now.AddHours(-1); // 通過設定到期時間來清除cookie

3.CACHE

 

應用程式級變數,存於伺服器緩衝中被所有使用者共用,由系統自動分配和回收,使用Cache["name"]==null?判斷是否到期。

Cache["number"] = "65464646";

Cache["ca"] = "aaa";

Cache["cb"] = "bbb";

lbNumber.Text +="OldCache value:"+ Cache["number"].ToString();

清空緩衝

IDictionaryEnumerator ide = Cache.GetEnumerator();

while (ide.MoveNext())

{

Cache.Remove(ide.Key.ToString());

}

lbNumber.Text += "點擊清空後的cache數量:" + Cache.Count;

 在用戶端是無法清空和重新整理的,如果要的話可能要修改WEB.CONFIG和IIS的重啟,或者提供頁面方法,觸發清楚

4.SESSION

頁面級變數,儲存在伺服器端,通過 Timeout 設定逾時時間(可長可短,預設30分鐘)。
系統為每位訪問者自動分配一個 sessionid(逾時重新分配),使之互不影響,生命週期與訪問者會話時間相同。

Session["scName"] = string.IsNullOrEmpty(scName.Value)?"default session string":scName.Value;

Session.Timeout = 11; // 時間單位是分鐘

lbSession.Text = Session["scName"].ToString();

通過項名稱刪除 session

Session.Remove("scName"); // 刪除單條session

Session.Clear(); // 清空session

lbSession.Text = "session is clesred, please refreash.";

 

session的工作原理

一直在使用session儲存資料,一直沒有好好總結一下session的使用方式以及其工作原理,今天在這裡做一下梳理。
這裡的介紹主要是基於php語言,其他的語言操作可能會有差別,但基本的原理不變。

 

1.在php中如何操作session:

session_start();   //使用該函數開啟session功能

$_SESSION       //使用預定義全域變數操作資料

使用unset($_SESSION['key']) //銷毀一個session的值

簡單地操作,一切都是由伺服器實現;由於處理在後台,一切看起來也很安全。但是session採用什麼樣機制,又是怎樣被實現,並且如何來保持會話的狀態的呢?

 

2.session實現與工作原理

瀏覽器和伺服器採用http無狀態的通訊,為了保持用戶端的狀態,使用session來達到這個目的。然而服務端是怎麼樣標示不同的用戶端或使用者呢?
這裡我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會採取什麼方式來區分不同的人呢!你可能根據臉型,也有可能根據使用者的名字,
或者人的身份證,即採用一個獨一無二的標示。在session機制中,也採用了這樣的一個唯一的session_id來標示不同的使用者,不同的是:瀏覽器每次請求都會帶上
由伺服器為它產生的session_id.

簡單介紹一下流程:當Client Access Server時,伺服器根據需求設定session,將會話資訊儲存在伺服器上,同時將標示session的session_id傳遞給用戶端瀏覽器,
瀏覽器將這個session_id儲存在記憶體中(還有其他的儲存方式,例如寫在url中),我們稱之為無到期時間的cookie。瀏覽器關閉後,這個cookie就清掉了,它不會存在使用者的cookie臨時檔案。
以後瀏覽器每次請求都會額外加上這個參數值,再伺服器根據這個session_id,就能取得用戶端的資料狀態。

如果用戶端瀏覽器意外關閉,伺服器儲存的session資料不是立即釋放,此時資料還會存在,只要我們知道那個session_id,就可以繼續通過請求獲得此session的資訊;但是這個時候背景session還存在,但是session的儲存有一個到期
時間,一旦超過規定時間沒有用戶端請求時,他就會清除這個session。

下面介紹一下session的儲存機制,預設的session是儲存在files中,即以檔案的方式儲存session資料。在php中主要根據php.ini的配置session.save_handler
 來選擇儲存session的方式。

這裡順便說明一下,如果要做伺服器的lvs,即多台server的話,我們一般使用memcached的方式session,否則會導致一些請求找不到session。
一個簡單的memcache配置:
session.save_handler = memcache
session.save_path = "tcp://10.28.41.84:10001"

當然如果一定要使用files檔案快取,我們可以將檔案作nfs,將所有的儲存session檔案定位到一個地方。

剛才講返回給使用者的session-id最終儲存在記憶體中,這裡我們也可以設定參數將其儲存在使用者的url中。

 

3.執行個體問題
現有系統A,B; 假設A系統是可以獨立啟動並執行web系統,即可以和瀏覽器直接處理session, B系統是基於mobile的,需要調用A系統的功能介面,
在保持A不改變的情況下,即登陸驗證,session儲存都不變的情況下,B系統能處理前端使用者的請求。

這裡提供的方案是使用PHP實現

在使用者登陸成功後,將儲存的session的session-id返回給B系統,然後B系統每次請求其他介面都帶session_id。
A系統在session_start前加上session_id(session_id);

這樣B系統就能安全的調用A

 因為他的檔案有一些還是儲存在用戶端的,所以清楚用戶端最近記錄檔案,有時也會造成SEESSION失效

6.VIEWSTATE

頁面級變數(可以看作頁面Session,可儲存各種變數。

儲存變數到 ViewState

ViewState["number"]=123456;

ViewState["table"]=DataTable; // 存放DataTable、Hashtable…對象

讀取 ViewState

times=(int)ViewState["number"];

table=(DataTable)ViewState["table"];

 

Application

應用程式級變數,被所有使用者共用使用,生命週期與伺服器已耗用時間相同。道理和第一點Application_Start事件的原理差不多。

 

 

一直在使用session儲存資料,一直沒有好好總結一下session的使用方式以及其工作原理,今天在這裡做一下梳理。
這裡的介紹主要是基於php語言,其他的語言操作可能會有差別,但基本的原理不變。

 

1.在php中如何操作session:

session_start();   //使用該函數開啟session功能

$_SESSION       //使用預定義全域變數操作資料

使用unset($_SESSION['key']) //銷毀一個session的值

簡單地操作,一切都是由伺服器實現;由於處理在後台,一切看起來也很安全。但是session採用什麼樣機制,又是怎樣被實現,並且如何來保持會話的狀態的呢?

 

2.session實現與工作原理

瀏覽器和伺服器採用http無狀態的通訊,為了保持用戶端的狀態,使用session來達到這個目的。然而服務端是怎麼樣標示不同的用戶端或使用者呢?
這裡我們可以使用生活中的一個例子,假如你參加一個晚會,認識了很多人,你會採取什麼方式來區分不同的人呢!你可能根據臉型,也有可能根據使用者的名字,
或者人的身份證,即採用一個獨一無二的標示。在session機制中,也採用了這樣的一個唯一的session_id來標示不同的使用者,不同的是:瀏覽器每次請求都會帶上
由伺服器為它產生的session_id.

簡單介紹一下流程:當Client Access Server時,伺服器根據需求設定session,將會話資訊儲存在伺服器上,同時將標示session的session_id傳遞給用戶端瀏覽器,
瀏覽器將這個session_id儲存在記憶體中(還有其他的儲存方式,例如寫在url中),我們稱之為無到期時間的cookie。瀏覽器關閉後,這個cookie就清掉了,它不會存在使用者的cookie臨時檔案。
以後瀏覽器每次請求都會額外加上這個參數值,再伺服器根據這個session_id,就能取得用戶端的資料狀態。

如果用戶端瀏覽器意外關閉,伺服器儲存的session資料不是立即釋放,此時資料還會存在,只要我們知道那個session_id,就可以繼續通過請求獲得此session的資訊;但是這個時候背景session還存在,但是session的儲存有一個到期
時間,一旦超過規定時間沒有用戶端請求時,他就會清除這個session。

下面介紹一下session的儲存機制,預設的session是儲存在files中,即以檔案的方式儲存session資料。在php中主要根據php.ini的配置session.save_handler
 來選擇儲存session的方式。

這裡順便說明一下,如果要做伺服器的lvs,即多台server的話,我們一般使用memcached的方式session,否則會導致一些請求找不到session。
一個簡單的memcache配置:
session.save_handler = memcache
session.save_path = "tcp://10.28.41.84:10001"

當然如果一定要使用files檔案快取,我們可以將檔案作nfs,將所有的儲存session檔案定位到一個地方。

剛才講返回給使用者的session-id最終儲存在記憶體中,這裡我們也可以設定參數將其儲存在使用者的url中。

 

3.執行個體問題
現有系統A,B; 假設A系統是可以獨立啟動並執行web系統,即可以和瀏覽器直接處理session, B系統是基於mobile的,需要調用A系統的功能介面,
在保持A不改變的情況下,即登陸驗證,session儲存都不變的情況下,B系統能處理前端使用者的請求。

這裡提供的方案是使用PHP實現

在使用者登陸成功後,將儲存的session的session-id返回給B系統,然後B系統每次請求其他介面都帶session_id。
A系統在session_start前加上session_id(session_id);

這樣B系統就能安全的調用A

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.