Asp classic POST/GET时会话超时。允许登录,然后发布数据

Asp classic POST/GET时会话超时。允许登录,然后发布数据,asp-classic,Asp Classic,经典的asp 有时,当用户填写大表单时,会话超时 目前,用户只得到“您未登录”和登录表单。 当用户再次登录时,他必须重新开始,并导航到上一个表单以再次填写 如果用户成功登录,我想再次提交formdata 系统中有许多表单/页面,因此登录检查在一个公共包含文件中。Hi-Lei如果会话时间是由服务器控制数据保存时间,也许您可以使用cookie解决问题,因为它由客户端(浏览器)控制。希望我的想法能对您有所帮助,谢谢willie经典ASP,我们的“单向”发布代码 我设置了一个cookie,并将cooki

经典的asp

有时,当用户填写大表单时,会话超时

目前,用户只得到“您未登录”和登录表单。 当用户再次登录时,他必须重新开始,并导航到上一个表单以再次填写

如果用户成功登录,我想再次提交formdata


系统中有许多表单/页面,因此登录检查在一个公共包含文件中。

Hi-Lei如果会话时间是由服务器控制数据保存时间,也许您可以使用cookie解决问题,因为它由客户端(浏览器)控制。希望我的想法能对您有所帮助,谢谢willie

经典ASP,我们的“单向”发布代码

我设置了一个cookie,并将cookie保存到members表中

cookie不需要任何花哨的东西,日期、名称、IP、会话都可以正常工作。用盐对它们进行编码

如果表单页面上的用户会话丢失或超时,则可以使用此特殊cookie

基本设置:(代码不够完整,不足以获得想法和流程) 登录页面。 创建散列

另存为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&"" .....
在表格页: 检查Post上的会话。。。如果Session=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 cookie,然后搜索您的丢失会话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方法的不同部分

如果你需要什么,尽管问


Murray

我的解决方案是,在所有页面上包含的头文件中,如果用户已注销,则创建一个表单,隐藏所有post和get值,并且用户名/密码字段可见

然后,用户重新输入用户名和密码,并提交表单

如果用户随后成功登录,脚本将继续并处理数据

它不适用于上传,但无论如何很少使用