如何用ASP.NET里的State Management Database来储存Session Variable。
(華版)
很多人都会在地一时间里想到用Cookies(HttpCookies)来储存某些资料;以便在游览到另一个WebForm时,依然能够从用户端读取所储存的资料。但是,万一如果用户的游览器不容许Cookies。。。那就不是完了吗。。。更何况Cookies只能容纳4K Byte的资料而且!
Dim DemoCookie As New HttpCookie("sampleCookie")
Dim time As DateTime = DateTime.Now
DemoCookie.Values.Add("Time", time.ToString())
DemoCookie.Expires = time.AddDays(5)
Response.Cookies.Add(DemoCookie)
Response.Redirect("sample.aspx")
Dim time As DateTime = DateTime.Now
DemoCookie.Values.Add("Time", time.ToString())
DemoCookie.Expires = time.AddDays(5)
Response.Cookies.Add(DemoCookie)
Response.Redirect("sample.aspx")
所以就要改用server side的SQL数据库方式而放弃client side的Cookies;更何况用SQL数据库是非常简单,只需安装.NET Framework所提供的InstallSqlState.sql script和修改一下Web.Config文件就行了。其它就如平常写Session变量一模一样。
InstallSqlState.sql可以在 C:\WINDOWS\Microsoft.NET\Framework\(版本号码)\ 文件夹里找到。
以下就是需要修改的Web.Config里的sessionState属性:
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=localhost; integrated security=true"
cookieless="false"
timeout="20"
/>
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=localhost; integrated security=true"
cookieless="false"
timeout="20"
/>
把原有的
1. mode=InProc改去mode=SQLServer。
2. 修改sqlConnectionString字符串,但是在这里不用填写Initial Catalog。因为AspState是默人Catalog,
也就InstallSqlState.sql所安装的ASP State Management database。
3. 把timeout修改去你想要的session expire值;timeout的单位以分钟来计算。
4. cookieless="false"代表SesionID容纳在URL里,比如http://server/(SessionID)/Sample.aspx
所以,此属性的值一般都是false。
Dim time As DateTime = DateTime.Now
Session("Time") = time.ToString())
Session("Time") = time.ToString())