php session不穩定的解決方法:先在設定檔中設定sessionState節點;然後把類別設為可序列化的類別;最後啟動「asp.net state service」。
推薦:《PHP影片教學》
解決session不穩定的問題
公司的系統一直以來都會出現session突然遺失的情況,昨天想了一個法子,但行不通,今天早上透過搜尋資料解決了它。
昨天我是想透過新建資料表來儲存使用者登入的訊息,但是,要標記一個使用者的時候,想用IP來標記,覺得不太現實,因為有時候對外網路的IP位址是一樣的,於是想用MAC位址來解決,對過sendarp的方法可以得到指定IP的MAC,但是這也僅僅適用於區域網,非區域網路是無法實現的,於是這種思路到此宣告破產。除非在客戶端透過js去獲取再發送到服務端,但考慮到不用客戶端cookiess的話每次都要查很麻煩,於是放棄。
今天在網路上發現,可以在設定檔中設定sessionState節點:
<sessionState mode="Off|InProc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" stateNetworkTimeout="number of seconds"/>
必須有的屬性是
属性 选项 描述 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秒钟。
然後,啟動asp.net state service。
注意要將類別設為可序列化的類別!才可以加到session中。
System.Web.SessionState.HttpSessionState session = HttpContext.Current.Session; session.Add("user", obj); HttpContext.Current.Session.Add("user", obj); if (obj.USER_DIST_ID == "0000") { HttpContext.Current.Session.Add("sDistID", obj.USER_DIST_ID); } System.Web.Security.FormsAuthentication.SetAuthCookie(obj.USER_ID , false); 。。。
以上是php session 不穩定怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!