そこで、次のようにこれに対する解決策を思いつきました。Start.asp と Start2.asp という 2 つのページを追加しました。元のログイン ページは、現在 Start2.asp で設定されている post 変数をチェックするように変更されました。そのため、login.asp がその post 変数を認識しない場合、Start.asp にリダイレクトされます。Start.asp は ASPSessionID を 0 に設定して無効にします。Response.Cookies("ASPSESSIONID...") でアクセスできないエラーが発生するため、キーはこれを行うために Response.AddHeader "Set-Cookie" を使用しています。要素:
Start.ASP のコード
<%
If instr(Request.ServerVariables("HTTP_COOKIE"), "ASPSESSIONID") > 0 Then
Dim Allcookies
AllCookies = Split(Request.ServerVariables("HTTP_COOKIE"),";")
For i = 1 to UBound(AllCookies)
If instr(AllCookies(i), "ASPSESSIONID") > 0 Then
Response.AddHeader "Set-Cookie", Left(AllCookies(i),instr(AllCookies(i),"=") -1) & "=0; path=/;secure;httponly"
End if
Next
End if
Response.Redirect("start2.asp")
%>
次に、すべての ASPSEssionID Cookie を探して Secure を追加する Start2.asp を呼び出します。httponly (別の発見のためにこれらを追加する必要がありました.SSL証明書がWebサーバー上にある場合にのみセキュアを追加するASPメタベース設定が機能します。この場合、SSL証明書はWebサーバーの前のロードバランサーにあります)。
Start2.asp のコード
<%
'CODE for authorization/authentication
'...
Session.Contents.RemoveAll
Session.Abandon
If instr(Request.ServerVariables("HTTP_COOKIE"), "ASPSESSIONID") > 0 Then
Dim Allcookies
AllCookies = Split(Request.ServerVariables("HTTP_COOKIE"),";")
For i = 1 to UBound(AllCookies)
if left(Request.ServerVariables("HTTP_HOST"),2) = "65" and instr(AllCookies(i), "ASPSESSIONID") > 0 Then
Response.AddHeader "Set-Cookie", AllCookies(i) & "; path=/;secure;httponly"
End if
Next
End if
%>
<html>
<body>
<form action="login.asp" method="post">
<input type="hidden" name="start2" id="start2" value="Yes" />
</form>
<script type="text/javascript">
document.forms[0].submit();
</script>
</body>
</html>
ただし、実際には、新しい ASPSessionID は Start2.asp 内で生成されるまで生成されないため、secure および httponly 用の Set-Cookie コードも login.asp で実行する必要があります。したがって、上記の同じコードは、次のコードの直後に login.asp の先頭にコピーされました。
If request.form("Start2") = "" Then
Response.Redirect("start.asp")
End if