2016-01-05 24 views
0

經典asp。POST/GET時會話超時。允許登錄,然後發佈數據

有時會話在用戶填寫大表單時超時。

目前用戶剛剛得到「您沒有登錄」和登錄表單。 當用戶再次登錄時,他必須重新開始,然後導航到之前的表單以再次填寫。

我想只是再次提交formdata,如果用戶登錄成功。

系統中有許多表單/頁面,所以登錄檢查位於一個通用的包含文件中。

回答

0

我的解決辦法是,在包括在所有頁面的頭文件,如果用戶將被註銷,創建一個表單與所有發佈和獲取隱藏的價值,以及用戶名/密碼字段可見。

用戶然後重新輸入用戶名和密碼,並提交表單。

如果用戶然後成功登錄,腳本將繼續並處理數據。

它不適用於上傳,但很少使用。

0

嗨Leif會話時間是服務器控制數據保持時間,也許你可以使用cookie來解決你的問題,因爲它是由客戶端(瀏覽器)控制的。希望我的想法可以幫助你,謝謝你willie

0

經典的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方法的不同部分。

如果你需要任何東西只是問。

穆雷