私はこの問題を 2 日間解決しようとしてきましたが、まだネット上で役立つものを見つけることができませんでした。奇妙なことに、これは以前は機能していました..! Webサーバーの設定をいくつか変更した後(残念ながら正確な変更を思い出せません)、動作しなくなりました:(
これが何が起こるかです。
page_load (aspx.cs、codebehind) で現在の日時文字列 (長い日時文字列、秒を含む) に値が設定される aspx ページに隠しフィールドがあります。同時に、このランダムな値は、同じメソッドの次の行の右のセッション変数に記録されます。
(簡単に説明すると)この値をWebサービスに送信し、そこでこの値をセッション変数に保存されている値と照合します。何を推測します..同じものはありません! これは以前は機能していましたが、機能しなくなりました。何が変わったのか、何が間違っていたのかわかりません。この文字列の値はdatetime値(秒付き)なので、この値が「Most of The Time」で2秒ずつ変化していることが分かります。IIS で (ワーカー プロセスをアタッチして) コードをデバッグすると、セッションから回復された値が非表示フィールドから回復された値から 2 秒遅れていることがわかります。
これは私の開発マシンで動作していますが、問題は、Web サーバー (Windows サーバー 2008 r2) で動作していないことです。
あなたが提案できる代替案があることは知っています。私自身もこのアプローチの代替案を考えることができますが、ここでパズルを解くことに非常に興味があります...
どんな助けでも大歓迎です。
ありがとう。
編集:簡単なアプローチ
page_load でのメソッド呼び出し
addSecureString(System.DateTime.Now.Second.ToString());
変数を記録するメソッド
protected void addSecureString(string s) {
string secureS = "111" + s;
Session.Add("securestring", secureS);
hdnss.Value = Session["securestring"].ToString();
}
ウェブサービスで
string tocheck = Session["securestring"];
hdnss -> ページの非表示フィールドの ID 注: 重要な部分であり、変更されているため、datetime の Seconds 値を使用しています。