1. 程式人生 > >ASP.NET Session丟失問題解決方案總結及判斷Session是否過期【轉載】

ASP.NET Session丟失問題解決方案總結及判斷Session是否過期【轉載】

判斷Session是否過期:

通過BasrPage或IHtttpMoudle實現
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丟失問題解決方案總結:

1  <sessionState mode="InProc" cookieless="false" timeout="60"></sessionState>
 這個是可以解決超時問題的,但是這個極不安全,vs.net預設設定
 相當於把session交給IIS的程序管理,IIS的不穩定性將導致Session頻繁丟失 
 
2 sessionState mode=StateServer是建立獨立的Session的服務程序管理方式模式,
 這樣不受IIS的程序本身的不穩定影響,不容易導致session丟失,
 這樣可以實現多個asp.net的站點的session 共享。

在web.config檔案中設定mode屬性為StateServer外,要啟動 管理工具-服務-ASP.NET state service 項了。還必須設定執行StateServer伺服器的IP地址和埠號.如 果在IIS所在的機器執行StateServer則IP地址就是127.0.0.1,埠號通常是42424.配置如下:
  <sessionState mode=”StateServer”
  stateConnectionString="tcpip=127.0.0.1:42424".....>
  使用這種模式,會話狀態的儲存將不依賴IIS程序的失敗或者重啟,會話的狀態將儲存在StateServer程序的記憶體空間中。

3 SQLServer模式。這種模式是將會話的狀態儲存在SQL Server資料庫中的。使用這種模式前,必須至少有一臺SQL Server伺服器,並在伺服器中建立需要的表和儲存過程。.NET SDK提供了兩個指令碼來簡化這個工作:InstallSqlState.sql和UnInstallSqlState.sql。這兩國檔案存放在下面路徑 中:

  <%SYSTEMDRIVER%>/Winnt/Microsoft.NET/Framework/<%version%>/
  要配置SQL Server 伺服器,可以在命令列中執行SQL Server提供的命令列工具osql.exe
  osql -s [server name] -u [user] -p [password] <InstallSqlState.sql
  例如:osql -s (local) -u as -p “”-i InstallSqlState.sql
  做好必要的資料庫準備工作後,將web.config檔案中的sessionstate元素的mode屬性改為”sqlserver”,並指定SQL連線字串。具體如下:
  mode="SQLServer"
  sqlConnectionString="data source=127.0.0.1;userid=sa;password=;Trusted_Connection=yes"
  使用SQLServer模式處了可以使Session的狀態不依賴於IIS伺服器之外,還可以利用SQL Server的叢集,使狀態儲存不依賴於單個的SQL Server,這樣就可以為應用程式提供極大的可靠性。