13

従来の ASP ページに問題があり、3 日経っても解決できません。

ページはセッションで動作しています - Request.ServerVariables("HTTP_COOKIE") で ASPSESSIONID Cookie が 2 回設定されることがあります。これにより、ページが更新されたときに、ASP ページが 2 つのセッション間でジャンプします。

現在の SessionId、サーバー ソフトウェア、および HTTP_COOKIE 値を出力するテスト ページを作成しました。

サンプル出力:


セッション ID: 308542840

セッション タイムアウト: 20 分

サーバー ソフトウェア: Microsoft-IIS/6.0

HTTP_COOKIE: ASPSESSIONIDQCBATRAD=MBHHDGCBGGBJBMAEGLDAJLGF; ASPSESSIONIDQCCDTTCB=PGHPDGCBBPLKALGGKIPOFIGDM


ASPSESSIONID が 2 つあるのはなぜですか? ページを更新すると、2 つのセッション ID のいずれかがランダムに出力されます。

これは IE9 の問題を示すスクリーンキャストです: http://prinz-alexander.at/asp_test.avi

このエラーは ie8 と ie9 でよく発生します。

問題を再現するには、次の手順を実行してください。

  1. IE8またはIE9を完全に閉じます
  2. IE8 または IE9 を起動し、http: //www.pfiffikus.at/pfiffikus/tests/ を開きます。
  3. ページがロードされた直後に、ページを複数回更新します

この手順を繰り返すと、ランダムに (常にではありません) HTTP_COOKIE に 2 つの異なる ASPSESSIONID が入力されます。

asp テスト ファイルは、mentiod 値のみを出力しており、ソース コードでは他に何も起こっていません。

これは、asp テスト ファイルのコードです。

<% If trim(Session("test_val")) = "" Then
     Dim my_num
     Randomize
     number = Int((rnd*1000))+1
     Session("test_val") = number
   End If
%>

<b>Session ID:</b>
<% response.write(Session.SessionId) %><br /><br />

<b>Session("test_val"):</b>
<% response.write(Session("test_val")) %><br /><br />

<b>Session Timeout:</b>
<% response.write(Session.Timeout) %> minutes<br /><br />

<b>Server Software:</b>
<% response.write(Request.ServerVariables("SERVER_SOFTWARE")) %><br /> <br />

<b>HTTP_COOKIE:</b> <% response.write(Request.ServerVariables("HTTP_COOKIE")) %>

Cookie で複数の ASPSESSIONId を回避するにはどうすればよいですか?

助けてくれてありがとう!

4

7 に答える 7

1

この問題は私も長い間悩まされていました。そして、私はそれを解決することはできません。

それはブラウザのビジネスではありません。私の Chrome、Firefox、IE にはすべてこの問題があります。

1 ページに 20 個以上の ASPSESSIONIDXXXX Cookie が表示されることがあります。

最後に、JavaScript を使用して古い ASPSESSIONID*** をクリアし、最新のものを保持する必要があります。

function clearASPSESSIONID(){
    var cks = document.cookie.match(/\b(ASPSESSIONID[A-Z]+)(?==)/g),
        lskey = 'oldASPSESSIONID-'+location.protocol+'//'+location.host,
        old = window.localStorage ? localStorage.getItem(lskey) : '',
        keep, i;
    for(i=0;i<cks.length;i++){
        if((old && old.indexOf(cks[i])<0) || i==cks.length-1){
            keep = cks[i];
        }
    }
    for(i=0;i<cks.length;i++){
        if(keep != cks[i]){
            document.cookie = cks[i] + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
        }
    }
    if(window.localStorage){
        localStorage.setItem(lskey, keep ? keep : '');
    }
}
clearASPSESSIONID();
于 2013-01-12T19:30:46.903 に答える
1

アプリケーション プールの [詳細設定] に移動し、[最大ワーカー プロセス] を 1 に設定します。

于 2016-02-05T11:24:13.047 に答える
0

global.asa ファイル内:

Sub Session_OnStart

    Dim cookie, cookies : cookies = Split(Request.ServerVariables("HTTP_COOKIE"),";")
    For Each cookie In cookies
        cookie = Trim(Split(cookie,"=")(0))
        If Left(cookie,12) = "ASPSESSIONID" Then
            Response.AddHeader "Set-Cookie", cookie&"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/"
        End If
    Next

End Sub
于 2015-12-01T12:25:58.073 に答える
0

たぶん後で、受け入れられた答えがないので役に立つかもしれません。

アプリケーション プールのリサイクル オプションで、アプリケーションをすぐにリサイクルしないかどうかを確認してください。そうしないと、再生成する新しいアプリケーションごとに ASPSESSIONIDXXXXXXX で終了します。

リサイクル条件はいくつかあります。誤って「リクエストの最小数」を 1 に設定し、リクエストごとに ASPSESSIONID を取得しました

于 2017-11-15T00:06:13.510 に答える
-1

ユーザーのセッションで値を割り当てました。このようにセッションをフェッチして、すべてのユーザーに異なる一意の値を割り当ててみてください

<% 
Session("test") = "test value" 
a=Session("test")
response.Write(a)
%>
于 2012-10-09T08:51:07.193 に答える