6

JQueryAJAXを使用するWebサイトがあります。このJQueryコードで

$.post("/ajax/getsomedata.aspx", {'id': id }, 
    function(data) 
    {
        dosomething(data);
    }
);

cookieless = "false"を指定してこれを実行すると、 IDがRequest.Formに表示されます。cookieless = "true"を設定すると、idがRequest.Formに存在しなくなります。

更新、私がしたこと

データを保持し、自動リダイレクトを回避するために、Response.ApplyAppPathModifier()への呼び出しを追加しました。私は**Diago((を除いて、彼の参照が何が起こっているのかについてのインサイトを与えているので、私自身を削除しています。私は別のドメインのアイデアが好きですが、ここではそれを行うことはできません。

更新されたコードは次のとおりです。

$.post("<%=Response.ApplyAppPathModifier("/ajax/getsomedata.aspx")%>", 
        {'id': id },
    function(data)     
    {        
        dosomething(data);    
    }
);

MSDN によると、Response.ApplyAppPathModifier()は、Cookieがないセッション状態の場合はセッションIDを追加し、そうでない場合は変更されていないURLを返します。

セッションIDがないため、ASP.NETは新しいセッションを作成し、リダイレクトを実行します(したがって、フォームデータをすべて削除します)。

4

3 に答える 3

2

私は最近同じ問題に苦しんでいました。これは、Cookieなしのセッションを使用する場合の4つの欠点の1つです。サーバーにアクセスするとリクエストが書き換えられ、リクエスト変数が削除されます。これは、ASP.Netを使用してWebサービスとPOST要求を使用する場合に非常に苦痛になる可能性があります。これは、GETを使用するときに正常に機能します。

通常の投稿を使用しても同様の問題が発生します。それがどのように行われるかを説明する記事がここにあります。このMSDNの記事では、欠点についても詳しく説明しています。

最善の解決策は、Cookieなしのセッションを使用しない別のドメインまたはIIS仮想サイトにサービスを配置することです。

Cookieなしのセッションでフォーム認証を使用することも興味深い課題です。

于 2009-05-15T17:31:58.630 に答える
2

私はこの問題を解決するために一日を無駄にしましたが、これはただの簡単な修正です。

通話中PageMethod、セッションIDはリクエストURLとともに渡されないため、新しいsession_startイベントが発生します。pagemethod新しいセッション開始イベントが発生しないように、を呼び出す前に正確な要求パスを設定する必要があります。

if ('<%= HttpContext.Current.Session.IsCookieless %>==True') {
    //need to pass session id in request path
    PageMethods.set_path('<%= System.Web.Configuration.WebConfigurationManager.AppSettings("WebRoot") %>(S(<%=Session.SessionID%>))/secure/PageName.aspx');
}
PageMethods.PageMethodName(param1,param2, CallSuccess, CallFailed);
于 2012-08-28T16:00:23.620 に答える
0

リクエストにセッショントークンを含める必要があります。ASP.Netは、URLまたは非表示のフォームフィールドのいずれかに追加する必要があります。それをつかんで、jqueryパラメータオブジェクトを追加します。それは私がASP.NETでコーディングしたことがないcozと言える限りです

于 2009-05-15T15:21:58.473 に答える