判斷Session是否過期:
通過BasrPage或IHtttpMoudle實現(xiàn)
public class BasePage : System.Web.UI.Page
{
public BasePage()
{
}
protected override void OnInit(EventArgs O)
{
if (base.Session["UserId"] == null || base.Session["UserId"].ToString().Equals(""))
{
Response.Redirect("~/Error.aspx");
}
}
}
if(Session["user"]==null)
{
this.Response.Redirect("Error.aspx");
}
<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx">
</customErrors>
Session丟失問題解決方案總結(jié):
1 <sessionState mode="InProc" cookieless="false" timeout="60"></sessionState>
這個是可以解決超時問題的,但是這個極不安全,,vs.net默認(rèn)設(shè)置
相當(dāng)于把session交給IIS的進(jìn)程管理,,IIS的不穩(wěn)定性將導(dǎo)致Session頻繁丟失
2 sessionState mode=StateServer是建立獨立的Session的服務(wù)進(jìn)程管理方式模式,
這樣不受IIS的進(jìn)程本身的不穩(wěn)定影響,,不容易導(dǎo)致session丟失,,
這樣可以實現(xiàn)多個asp.net的站點的session 共享。
在web.config文件中設(shè)置mode屬性為StateServer外,,要啟動 管理工具-服務(wù)-ASP.NET state service 項了,。還必須設(shè)置運行StateServer服務(wù)器的IP地址和端口號.如 果在IIS所在的機(jī)器運行StateServer則IP地址就是127.0.0.1,端口號通常是42424.配置如下:
<sessionState mode=”StateServer”
stateConnectionString="tcpip=127.0.0.1:42424".....>
使用這種模式,會話狀態(tài)的存儲將不依賴IIS進(jìn)程的失敗或者重啟,會話的狀態(tài)將存儲在StateServer進(jìn)程的內(nèi)存空間中。
3 SQLServer模式,。這種模式是將會話的狀態(tài)保存在SQL Server數(shù)據(jù)庫中的,。使用這種模式前,必須至少有一臺SQL Server服務(wù)器,,并在服務(wù)器中建立需要的表和存儲過程,。.NET SDK提供了兩個腳本來簡化這個工作:InstallSqlState.sql和UnInstallSqlState.sql。這兩國文件存放在下面路徑 中:
<%SYSTEMDRIVER%>/Winnt/Microsoft.NET/Framework/<%version%>/
要配置SQL Server 服務(wù)器,,可以在命令行中運行SQL Server提供的命令行工具osql.exe
osql -s [server name] -u [user] -p [password] <InstallSqlState.sql
例如:osql -s (local) -u as -p “”-i InstallSqlState.sql
做好必要的數(shù)據(jù)庫準(zhǔn)備工作后,,將web.config文件中的sessionstate元素的mode屬性改為”sqlserver”,并指定SQL連接字符串。具體如下:
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;userid=sa;password=;Trusted_Connection=yes"
使用SQLServer模式處了可以使Session的狀態(tài)不依賴于IIS服務(wù)器之外,,還可以利用SQL Server的集群,,使?fàn)顟B(tài)存儲不依賴于單個的SQL Server,這樣就可以為應(yīng)用程序提供極大的可靠性。