2011-02-03 9 views
17

GenericHandlerとanonymousIdentificationに問題があります。ASP.NET汎用ハンドラとセッション

Web configで<anonymousIdentification enabled="true" />が有効になっている場合、JQuery GET/POST要求がサーバーに送信されるたびに、その要求は新しいユーザーと新しいユーザーセッションで実行されます。

これを軽減する方法はありますか?私は現在のユーザーのセッション変数にアクセスする必要があります...それは本当にイライラしています!

+0

を私はそれをチェックしていませんが、あなたはjQueryのGET REQを送信している場合、私は思います。クライアントからは、現在のユーザーコンテキストで処理されます。フィドラーでの確認は、ASP.netセッションクッキーとノーマルとjqueryの両方で同じです。 –

+0

匿名IDを無効にすると機能しますか?フォーム認証を使用していますか? web.config内のその特定のパスでanonをオフにできますか? – jcolebrand

+0

これが@drachensternで動作するかどうか試してみます。あなたは間違って@Shekhar_Proです。セッションにユーザーデータを格納します。 1つの値はUserRegistratinoStateです。ユーザーがセッションで列挙値を登録したばかりのページから来た場合は、UserRegistrationState.Registeredです。私はこれを確認しました。しかし、別のページのjsからハンドラを呼び出すと、ハンドラ内のコードの最初の行でそのセッション変数がチェックされます。変数が存在しない場合は、自動的にUserRegistrationState.Anonymousを返します。私は、JQueryからのGetリクエストが新しいユーザの下で実行されていると仮定することは安全だと思います。 – bleepzter

答えて

38

汎用ハンドラは、セッション変数にアクセスするためにIReadOnlySessionStateインターフェイスを実装する必要があります。セッション変数を記述する必要がある場合は、IRequiresSessionStateを実装してください。

+1

私はこれを一瞬で試してみます。ありがとう@ジョシュストドラ – bleepzter

+2

私はハンドラへのリクエストがウェブサイト(実際のセッションIDなし)に最初であった場合、ハンドラがセッションクッキーを返送しなかったという問題がありました。** public class MemberHandler:IHttpHandler、IRequiresSessionState ** –

+0

私は 'IReadOnlySessionState'が' IRequireSessionState'から派生したときにそれが十分であると思っていました。しかし、私は本当に 'IRequireSessionState'を明示的に使用しなければなりませんでした。そのポストに感謝します。 – jgasiorowski

-2

ウェブブラウザで、開発者モードで[ネットワーク]タブを有効にすることをお勧めします。 次に、AJAXにクッキーが送信されているかどうかをチェックインします(ある場合)。

クッキーが表示されない場合は、ブラウザがセッションを取得しなかったことを意味します。したがって、正しいインターフェイスを継承してクッキーにアクセスするようにしてください。あなたが応答には何も書き込ま前

string sesId = context.Session.SessionID; 

:セッションオブジェクトのセッションIDにアクセスし、クッキーを生成するために

を(Don'fはSystem.Web.SessionStateを使用することを忘れ)。 System.Web.SessionState.IRequiresSessionStateインタフェースの実装

public class Handler : 
    IHttpHandler, 
    System.Web.SessionState.IReadOnlySessionState 
+1

-1クッキーレスセッション状態を持つことは非常に可能性が高く、その可能性があります。識別子にアクセスすることは確かにクッキーを「生成」しません。 –

+0

これは私が言ったことではありません。 –

+0

私はそれを3回読む。もう一度読む必要はありません。 –

1

あなたはこれを使用することができ

public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    {  
    context.Session["StackOverflow"] = "overflowing";  
    context.Response.Redirect("~/AnotherPage.aspx");  
    } 

} 
11

+0

私はジェネリックハンドラでセッション値を取得して、セッションに保存したプライマリキーに対してイメージをアップロードしたいのですが、jqueryイメージアップロードプラグインを使用していて、ドキュメント上のすべてのプロパティをバインドします。私はハンドラのコードでiRequiresSessionStateを使用しましたが、それでも私はセッションの値にアクセスできません。セッションキーはまだ0です。誰も私にこのことを教えてもらえますか? –

関連する問題