如果指向瀏覽器的後退按鈕,我用波紋管代碼(VB,但你可以把它轉換):
的web.config:
<sessionState timeout="20" regenerateExpiredSessionId="true"/>
avsessexp.js(自動刷新頁面,如果在15分鐘後無效):
var BeatTimer;
function StartCheck() {
if (BeatTimer == null) {
BeatTimer = setInterval("CheckBeat()", 900000);
}
}
function CheckBeat() {
PageMethods.PokePage();
}
和致電StartCheck
有趣ction在每一頁(<body onload="StarCheck();">
)
在每一頁的標題,我把:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache, no-store, max-age=0, must-revalidate" />
<meta http-equiv="expires" content="0" />
的Module1.vb
Public Sub CheckSession()
With HttpContext.Current
.Response.Cache.SetExpires(DateTime.UtcNow.AddSeconds(-1))
.Response.Cache.SetCacheability(HttpCacheability.NoCache)
.Response.Cache.SetNoStore()
If .Session.IsNewSession = True Then LogOut()
'there You can put some code checking is user logged, ...
End With
End Sub
Public Sub LogOut()
With HttpContext.Current
.Session.RemoveAll()
.Session.Clear()
.Session.Abandon()
Try
.Response.Cookies.Add(New System.Web.HttpCookie("ASP.NET_SessionId", ""))
Catch ex As Exception
End Try
.Response.Redirect("Default.aspx")
End With
End Sub
,並在每個頁面(代碼隱藏):
<System.Web.Services.WebMethod(EnableSession:=True)> Public Shared Sub PokePage()
CheckSession()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then CheckSession()
End Sub
如果您嘗試單擊瀏覽器後退按鈕af ter註銷,CheckUser
將防止返回到prev頁面,並始終將用戶重定向到登錄頁面。
它在每個頁面/母版頁<asp:ScriptManager runat="server" id="sm1" EnablePageMethods="True"><asp:ScriptManager>
附註:上使用是非常重要的對我弱的英語感到抱歉。
是的,但必須有對有效會話數和無效的會話進行比較的服務器上,否則任何人都可以告訴服務器它們被登錄爲張三 – 2014-09-06 00:10:38
沒有,因爲所有的信息有些還挺授權它標識你爲Joe Smith被刪除'Session.Clear()' – Joanvo 2014-09-06 08:43:45
@Joanvo - Session與認證無關,這就是你標識爲Joe Smith的標識。 – 2014-09-12 21:08:45