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