2011-10-21 73 views
4
<script type="text/javascript" language="javascript"> 
function setCookie() 
{ 
    var path = '/', host = document.location.hostname; 
    document.cookie = 'random=' + Math.floor(Math.random()*11) + '; path=' + path + (host ? '; domain=' + document.location.hostname : "") ; 
} 
function readCookie() 
{ 
    alert(document.cookie) 
} 
</script> 

私は私のログにだけsessionidからaspsessionid****を変更する簡単な方法があったら私の人生はずっと簡単になります。これを行う簡単な方法はありますか?Windowsでは?新しいログファイルでスケジュールされた毎日のタスクとして実行できるスクリプト、バッチファイル、コマンドなどが必要です。このような時には、私はプログラムできることを願っています。提案は歓迎してください!ASPSESSIONID名前の変更

+0

何????????あなたは "ASP.NET_SessionId"を意味しますか?クッキー ? –

+0

@frankはあなたが実際にここで検索したものではありません。検索/リリースでログのこのクッキー名を変更する必要がありますか?またはあなたはASPでこれを変更するために勝ったのですか? - またはあなたはasp.netでこれを変更するために勝ったのですか?もっと明確にしてください – Aristos

+0

バウンティはこの質問を始めましたが、賞金に添付されている説明は実際の質問とかなり異なります。 – AnthonyWJones

答えて

1

using .NET 2.0 or greaterの場合は、web.configでCookie名を変更できます。

<configuration> 
    <system.web> 
     <sessionState cookieName="sessionid" /> 
    </system.web> 
</configuration> 
+0

これはクラシックでは動作しませんASPサイト。 – Frank

+0

@Frank申し訳ありません。質問にはASP.NET – HackedByChinese

+0

というタグが付けられています。完全なIISソリューションを探しています。 Web.configではIISヘッダーを削除できますが、MSFTでは、何かが見つからない場合を除いて、ASPSESSIONIDのマスクや名前の変更が容易になりませんでした。 – Frank

0

賞金の説明への答えは「本当にない」です。

セッションオブジェクトの使用をすべて停止し、セッションを無効にすることができます。したがって、独自のセッション管理(たとえばDBにデータを格納)を作成し、Cookieを使用して独自のセッションを追跡する必要があります。

以下は、元の(今かなり古い質問)に対する回答です。

ここでは、ASSessionIDxxxxxxxx =をログファイルに置き換えるVBScript関数を示します(Cookieログを有効にした標準のIISログファイルを想定しています)。 aspsessionidsの名前(クラシックASP)を変更するには - (公衆に利用できる知られているまたは文書化)

Sub ReplaceASPSessionIDInLog(path) 

    Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") 

    Dim stream : Set stream = fso.OpenTextFile(path) 
    Dim input: input = stream.ReadAll() 
    stream.close() 

    Dim rgx : Set rgx = new RegExp 
    rgx.Pattern = "ASPSESSIONID.+(?=\=)" 
    rgx.Global = True 
    rgx.IgnoreCase = True 

    Dim output : output = rgx.Replace(input, "SESSIONID") 

    Set stream = fso.OpenTextFile(path, 2) 
    stream.Write output 
    stream.close() 

End Sub 
+0

アンソニーありがとうございます。私はクライアントに送信される物理的なクッキー名を変更するためにASPSESSIONを取得しようとしています。理由は2つあります.1つは短く、2つ目は訪問者がそのASPSESSIONを知らないためです。あいまいさによるセキュリティ。 – Frank

+0

@フランク:ええ、私はちょうど元の質問にマッチしない賞金の説明に気づいた。残念ながら、簡単な答えは簡単です:いいえ。 ASPプロセッサにマップされているファイル拡張子も変更していますか?そうでなければ、.asp拡張子は少し離れています。 – AnthonyWJones

3

はオプションがありません。

IISからのセッションまたは@ENABLESESSIONSTATEディレクティブを使用してセッションを無効にし(ASP - >セッションのプロパティ - >セッション状態を有効にするfalse)、aspから提供される独自のCookieを使用することができます。しかし、アプリケーションでセッションオブジェクトが必要ない場合にのみ、これは問題ありません。

より良いアプローチは、正規表現(ASP版はすでにアンソニー・W・ジョーンズによって提示される)、または.NETで(最小限の単純化されたC#サンプル)を使用して、ログファイル内のこれらの「文字列」を変更することです:

Regex rx = new Regex("ASPSESSIONID[A-Z]+="); 

string log = rx.Replace(File.ReadAllText("u_ex120618.log"), "ASPSESSIONID="); 
Console.WriteLine(log); 

詳細約aspxとIIS

1つのオプションは、ヘッダーを削除するためにハンドラを使用することです。あなたはIISマネージャへのアクセスを持っていないケースをカバー -

public class RemoveHttpHeadersModule : IHttpModule 
{ 
    public RemoveHttpHeadersModule() 
    { 
    } 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     if (context != null) 
       context.PreSendRequestHeaders += this.OnPreSendRequestHeaders; 
    } 

    [SuppressMessage("Microsoft.Portability", "CA1903:UseOnlyApiFromTargetedFramework", MessageId = "System.Web.HttpResponse.#get_Headers()")] 
    private void OnPreSendRequestHeaders(object sender, EventArgs e) 
    { 
     try 
     { 
      HttpContext.Current.Response.Headers.Remove("ETag"); 
      HttpContext.Current.Response.Headers.Remove("Server"); 
      HttpContext.Current.Response.Headers.Add("Server", "my server"); 
     } 
     catch (HttpException) 
     { 
      throw; 
     } 
    } 
} 

別のオプションは、Global.asaxの中にすべてのもの(コードやコンパイルされたライブラリ)を制御することです。

削除(および/または追加)ヘッダー:

protected internal void Application_PreSendRequestHeaders(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); 
    HttpContext.Current.Response.Headers.Remove("X-Powered-By"); 
    HttpContext.Current.Response.Headers.Remove("ETag"); 
    HttpContext.Current.Response.Headers.Remove("Server"); 
} 

次のステップは、ASPXを非表示にされたハンドルエラー

protected internal void Application_Error(object sender, EventArgs e) 
{ 
    // get the error code    
    int ec = ((HttpException)HttpContext.Current.Error).GetHttpCode(); 
    // get the request path 
    // string req = HttpContext.Current.Request.Path; 
    // *** I suggest you to log the error before moving on 
    // clear the error to avoid IIS actions 
    HttpContext.Current.Server.ClearError(); 
    if (ec == 404) 
    { 
     // do what ever you want 
    } 
    // ... add other error codes handling; 
} 

What is the proper way to map .html to the ASP.NET pipeline in IIS7

ちょうど正しいフレームワークのバージョンを選択するように注意する:

はこれがここで回答され.htmlのよう私たちは.aspxページを提示したいと仮定します。 IISマネージャーにアクセスできない場合は、Webを変更してください。(この作業のために必要なもののみ提示)設定:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <handlers> 
      <add name="htmlpipe" path="*.html" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv4.0,bitness64" /> 
     </handlers> 
    </system.webServer> 
</configuration> 

上記の設定は、サーバなどの同じ基本属性(フレームワークのバージョン、32/64ビット)でのテスト環境を持って、あなたのPCに異なる可能性があり、作りますIISの変更を確認し、web.configで生成されたエントリを確認してください。

私にジョークを許可します。 "あなたはこの製品が好きですか?"

ありがとうフランク、あなたは古いディスクを差し込んで、忘れられたものを見つけました。従来のASPの提案がないのは残念です。

PS。 HackedByChineseの答えを忘れないでください。あなたが作成した最後のものを除いて、すべてのセッションクッキーを取り除きたい場合は

+0

Port80ソフトウェアではどうしていますか?製品はServerMask – Frank

+0

と呼ばれています。彼らは私たちが持っていないソースにアクセスするか、独自のカスタムセッション管理を持っています。 –

+0

同じセッション機能を持つ独自の.dllを作成する場合。しかし、同じ名前空間を使用し、呼び出しなど、それは動作しますか?あなたがセッションやクエリ文字列などのために独自のコンポーネントを書く場合、それらの名前はすでに使用されているので失敗しますか? – Frank

0

このコードは動作します:

Sub DeleteOldSession(logincookiename) 

    Dim strSessionCookie, arrSessionCookie, i, a 
    i = 0 
    a = 1 

    strSessionCookie = Request.ServerVariables("HTTP_COOKIE") 

    if strSessionCookie <> "" then 

    Dim intCookieValueStart, intCookieValueEnd, intCookieValueLength, strSessionCookieName, strSessionCookieValue 

     arrSessionCookie = Split(strSessionCookie,";") 

     if Ubound(arrSessionCookie) > 0 then 

      if InStr(strSessionCookie,logincookiename) = 0 then a = 0 

      if Ubound(arrSessionCookie) > a AND InStr(arrSessionCookie(Ubound(arrSessionCookie)),"NULL") = 0 then 

       For i = 0 to Ubound(arrSessionCookie) 
        if i >= a AND InStr(arrSessionCookie(i),"ASPSESSIONID") then 
         intCookieValueStart = InStr(arrSessionCookie(i),"=") 
         intCookieValueEnd = Len(arrSessionCookie(i)) 
         intCookieValueLength = intCookieValueEnd - intCookieValueStart 
         strSessionCookieName = Mid(arrSessionCookie(i),1,intCookieValueStart-1) 
         strSessionCookieValue = Mid(arrSessionCookie(i),intCookieValueStart+1,intCookieValueLength) 
         response.write("<script type=""text/javascript"">") 
         response.write("setCookie('" & strSessionCookieName & "','NULL',0)") 
         response.write("</script>") 
         'if lngUser = 1 then response.write("<p class=""alert"">" & strSessionCookieName & "</p>") 
        end if 
       Next 

      end if 

     end if 

    end if 

end sub 
+0

私は似たような解決策を持っていますが、Javascriptでは: http://stackoverflow.com/a/19709928/421891 –

関連する問題