应当如何理解session?
应当如何理解session? session对象是存储在服务器端,还是像cookies一样存储在客户端?
Session状态是在客户登录的时候创建的,它保存了客户特定的信息,并以Session ID来标识。当一个新客户访问应用程序时,先生成一个新的Session ID(或是Session Key),并为同一个客户接下来的请求创建联系。你可以在Session State中存储任意类型的数据,作为你的应用,状态被同一个进程和AppDomain(App域)维护。Session State的特点是为每一个特定的客户创建状态以维护客户的信息,这些状态信息存储在服务器端的默认的会话状态配置中。
Session(“Value”) = expr ; // Storing the data into session object
SomeFunction()
{
int expr = Int32.Parse(Session(“Value”));//Accessing from it
if (expr>=something)
{
//do something
}
Else
{
//do something else
}
//Some other thing goes here
}
既然Session State针对特定的客户建立,通过它来识别客户的请求。Asp.Net提供了一种加密机制和编码算法生成自己的Session Key。这是非常必要的,因为知道了你的Session Key,就有权限访问指定的页面了。
在ASP.Net中生成Session Key的方法:
byte[] sessionkey = new byte[15];
//Generates a random number
RNGCryptoServiceProvider rngkey = new RNGCryptoServiceProvider ();
rngkey.GetBytes (sessionkey);
string clientsessionKey = SessionId.Encode (sessionkey);
但是Session和客户端的Cookie是有关的,当客户关掉Cookie时,Session就失效了。不过在ASP.Net
中可以在web.config中修改设置,使Session的传递脱离Cookie。方法是:
<configuration>
<system.web>
<sessionState cookieless="true" />
</system.web>
</configuration>
可以分开ASP和ASP.NET的Session来看
ASP的Session有二个致命的不足:
1.ASP的Session保存在内存中,这意味着它不兼容于web Farm --- 作为Web服务器群集之一 ---- 而且如果IIS被重启或服务器被重启动,Session也会被毁坏。
2.ASP的Session依赖cookie将用户与Session相联。如果用户不启用他的浏览器的Cookie,ASP Web服务器就没有能力将传入请求映射到Session
ASP.NET的Session更周全、更稳定、而没有ASP的Session的这二个缺点。支持各种存储模式,还为不支持Cookie的考虑,支持无Cookie值操作。