.Net MVC4.0(5) - Session&cookie

Cookie原理:(第一次)瀏覽器發送請求(用戶名&密碼)---》application獲取請求(request用戶名密碼)---》將用戶信息存入cookie並response返回瀏覽器;

  public ActionResult Login(String user, String pw)
        {
            HttpCookie cookis = new HttpCookie("chenghan");
            cookis.Value = "1234565";
            Response.AppendCookie(cookis);
            MD5 md5 = new MD5();

抓包:

1,第一客戶端請求。只有sessionID沒有cooike;默認情況session存在cookie中。下面會講到如何讓sessionID存在URL中


2,application獲取表單之後返回給瀏覽器的信息,瀏覽器會將Cookie存入瀏覽器中


3,(第一次或者以後的所有請求)直接可以resquest獲取用戶名密碼;因爲此時的cookie中已經永遠有數據了。至於cookie的生命週期都是基礎哈,自己去看。


Session原理:

剛剛也看到了只要用戶和服務器建立了連接,服務器就會隨意產生一個24位的sessionID,帶包該客戶的唯一標示。我們就可以直接在代碼裏面寫session了。

抓到的SESSION:


1,session存在IIS進程內

        public ActionResult Login(String user, String pw)
        {
            //MD5加密
            MD5 md5 = new MD5();
            String password = md5.getMd5(pw, 32);
            //從數據庫獲取該用戶
            TAdmin Admin = dao.Login(user, password);         
            if (Admin != null)
            {
                //將用戶信息存入Admin中
                Session["Admin"] = Admin;
                //設置SESSION的過期時間,單位是分鐘
                Session.Timeout = 10;
以上是直接寫Session,她會存在IIS進程中,速度很快,但是存入的數據大了的話會影響性能;

2,通過修改配置文件來實現(如果webConfig文件中配置了session,代碼中也配置了session.我們也可以跟去我前面講的application的運行生命週期猜到第一次webconfig給session設置屬性了, 但是代碼的時候會覆蓋webconfig中的屬性)

必須有的屬性是

屬性 選項 描述 
mode  設置將Session信息存儲到哪裏 
 Off 設置爲不使用Session功能 
 InProc 設置爲將Session存儲在進程內,就是ASP中的存儲方式,這是默認值。 
 StateServer 設置爲將Session存儲在獨立的狀態服務中。 
 SQLServer 設置將Session存儲在SQL Server中。 

可選的屬性是:

屬性 選項 描述 
cookieless  設置客戶端的Session信息存儲到哪裏 
 ture 使用Cookieless模式 
 false 使用Cookie模式,這是默認值。 
timeout  設置經過多少分鐘後服務器自動放棄Session信息。默認爲20分鐘 
stateConnectionString  設置將Session信息存儲在狀態服務中時使用的服務器名稱和端口號,例如:"tcpip=127.0.0.1:42424”。當mode的值是StateServer是,這個屬性是必需的。 
sqlConnectionString  設置與SQL Server連接時的連接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。當mode的值是SQLServer時,這個屬性是必需的。 
stateNetworkTimeout  設置當使用StateServer模式存儲Session狀態時,經過多少秒空閒後,斷開Web服務器與存儲狀態信息的服務器的TCP/IP連接的。默認值是10秒鐘。  

InProc 模式:

修改webconfig中  在system.web節點內添加:

簡單方便配置了就能用:

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:8866" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"  cookieless="false" timeout="20" />

SQL Server 模式:

<sessionState mode="SQLServer" sqlConnectionString="data source=127.0.0.1\sql2008;userid= sa;password=95938" cookieless= "false"timeout= "20" />

存儲在數據庫中  

運行InstallSqlState.sql文件

首先需要在Winnt\Microsoft.Net中找到InstallSqlState.sql文件,然後在SQL Server 中執行它。在我的機器中,它存在於E:\WINNT\Microsoft.NET\Framework\v1.0.2914\目錄中。這個文件是微軟自己提供的,裏面有很全的SQL語句,修改你的web.config文件,指定Session的mode爲SQL Server

將web.config的sessionState部分改成: 


  在microsoft  sql  server  query  analyzer  中運行installsqlstate.sql,這個文件在     "C:\WINNT\Microsoft.NET\Framework\v1.1.4322"下面找  
  修改Web.config  
           <configuration  >  
               <system.web  >  
                     <sessionState  mode=  "SQLServer  "  
                         sqlConnectionString=  "server=127.0.0.1;UID=sa;PWD=secret  "  /  >  
               </system.web  >  
           </configuration  >  
       重啓SQL  server和SQL  Server Agent服務.  
  可以用下面的SQL  查詢會話  
select  *  from  AspStateTempSessions  



State Server  模式:存儲在.NET服務中

	  <sessionState mode="StateServer" stateConnectionString=  "tcpip=127.0.0.1:8866  "    cookieless="false" timeout="20" /> 

總結:看了之後,我覺得,,,,能儘量不用session就儘量不用。

參考資料:

http://blog.csdn.net/nihongyuan/article/details/4139928

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章