經典asp。POST/GET時會話超時。允許登錄,然後發佈數據
有時會話在用戶填寫大表單時超時。
目前用戶剛剛得到「您沒有登錄」和登錄表單。 當用戶再次登錄時,他必須重新開始,然後導航到之前的表單以再次填寫。
我想只是再次提交formdata,如果用戶登錄成功。
系統中有許多表單/頁面,所以登錄檢查位於一個通用的包含文件中。
經典asp。POST/GET時會話超時。允許登錄,然後發佈數據
有時會話在用戶填寫大表單時超時。
目前用戶剛剛得到「您沒有登錄」和登錄表單。 當用戶再次登錄時,他必須重新開始,然後導航到之前的表單以再次填寫。
我想只是再次提交formdata,如果用戶登錄成功。
系統中有許多表單/頁面,所以登錄檢查位於一個通用的包含文件中。
我的解決辦法是,在包括在所有頁面的頭文件,如果用戶將被註銷,創建一個表單與所有發佈和獲取隱藏的價值,以及用戶名/密碼字段可見。
用戶然後重新輸入用戶名和密碼,並提交表單。
如果用戶然後成功登錄,腳本將繼續並處理數據。
它不適用於上傳,但很少使用。
嗨Leif會話時間是服務器控制數據保持時間,也許你可以使用cookie來解決你的問題,因爲它是由客戶端(瀏覽器)控制的。希望我的想法可以幫助你,謝謝你willie
經典的ASP,我們的「單向」張貼代碼。
我設置了一個cookie並將cookie保存到成員表中。
該cookie不需要任何花哨,日期,名稱,IP,會話工作得很好。用Salt編碼他們的SHA256。
想法是如果在表單頁面上使用此特殊cookie並且其用戶會話已丟失或超時。
基本設置:(不完整的代碼只是足以讓想法和流程) 登錄頁面。 創建SHA256哈希
保存的Cookie
SetKeysCookie "CookieName","LostSession",strSHA256Hash,mysite.ext,"1"
Sub SetKeysCookie(strCookieName,strCookieKey,strCookieValue,strCookieDomain,strCookieExpires)
Response.Cookies(strCookieName).Expires = DateAdd("d",strCookieExpires, Now())
Response.Cookies(strCookieName).Domain = strCookieDomain
Response.Cookies(strCookieName).Path = "/"
Response.Cookies(strCookieName)(strCookieKey) = strCookieValue
Response.Cookies(strCookieName).Secure = True
End Sub
可選:我使用的是如下的HTTP_COOKIE。
Sub SetKeysCookieHttpOnly(strCookieName,strCookieKey,strCookieValue,strCookieDomain,strCookieExpires)
strGMTDateRFC22 = CookieServerUTC("d","&strCookieExpires&",5,"GMT") ' 1 Day set in char enc dec page
Response.AddHeader "Set-Cookie", strCookieName & "=" & strCookieKey & "=" & strCookieValue & "; expires=" & strGMTDateRFC22 & "; domain="& strCookieDomain &"; path=/;"
End Sub
更新成員數據庫:
UPDATE Member SET LostSession='"&strSHA256Hash&"' WHERE ID = "&id&"" .....
上形成頁:上發表 檢查會話......如果會話= NULL,則 檢查cookie設置。 獲取餅乾 老方法:Request.Cookies時( 「CookieName」)( 「LostSession」)
新HTTP_COOKIE
strCookieX = Request.ServerVariables("HTTP_COOKIE")
If InStr(strCookieX,"LostSession=") Then
j = InStrRev(strCookieX, "LostSession=")
if j > 0 Then
strCookieTEMP = Mid(strCookieX, j+12)
end if
j = 64
if j > 0 Then
strCookieTEMP = Left(strCookieTEMP, j-0)
End If
strCookie = strCookieTEMP
End If
以上會拉你的所有的HTTP cookies,然後搜索您的LostSession的cookie。因爲我們知道固定的長度,所以我們可以把它拉得乾乾淨淨。
接下來,我們檢查該cookie分配給哪個成員。
strSQL = "SELECT TOP 1 "
strSQL = strSQL & " ID,Email,ClientID,LostSession"
strSQL = strSQL & " FROM Members "
strSQL = strSQL & " WHERE LostSession = '"&strCookie&"' "
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL,Conn,3,3
If rs.EOF=False Then
Session("id") = rs("ID")
End If
rs.Close
Set rs = Nothing
找到後,我們設置最小會話變量以允許完成此帖。 會議(「id」)或會話(「授權」)無論您需要完成該職位。
在帖子結尾,我們成功提交了表單,現在我們可以將會話失敗的用戶發送到登錄頁面。
Session.Abandon
sRedirectPage = "https://domain.ext/logout.asp"
Response.Status="403.6 IP Restricted"
Response.AddHeader "Location",sRedirectPage
Response.end
您應該能夠看到保存已超時的會話的http cookie方法的不同部分。
如果你需要任何東西只是問。
穆雷