私はasp.net
ウェブアプリケーションで、セッション状態が失われるという奇妙な動作をしています。AJAX投稿内のHttpWebRequestの後でセッション状態が失われました
プロセスは、ユーザがアプリケーションにログインし、セッションが設定されています。次に、1つのフィールドに入力し、アプリケーションはAJAX POST
を.asmx
Webサービスに送信します。 Webサービス内で、別のサーバーからデータを取得するのにHttpWebRequest
を使用しています。
このデータは、ブラウザに出力されます。
さらにいくつかのフィールドが入力され、AJAX POST
を介して同じWebサービスに再度Post
のデータが入力されます。
問題
ストレートHttpWebRequest
た後、私は、セッション変数からユーザー名をつかみます。これは機能します。 ただし、次のAJAX
リクエストでは、セッションは存在しなくなりました。
これをテストしている間に、HttpWebRequest
が呼び出され、セッションが失われることのないステージを削除しました。だから何らかの理由で、セッションが私の最初のAJAX POST
の後で、HttpWebRequest
コードを実行している場合にのみ、AJAX POST
の前に削除されます。
コード
私はコード内の空想何もしていないのです。単純なjQueryのAJAXポストをやって
$アヤックス({ URL:方法、 データ:パラメータ、 タイプ: "POST"、 のcontentType: "アプリケーション/ jsonの;のcharset = UTF-8"、データ型: "json"、 成功:関数(データ){ //データの処理 }、 エラー:function(xhr、status、error){} });
System.Net.HttpWebRequest
を作成してからSystem.Net.HttpWebResponse
を削除してください。 (ただし任意のAJAXを使用していない)の前に、私はHttpWebRequest
を使用した場合の前に、この動作に気づいたことがありませんそして、セッション変数dim username as string = Session(_SESSION_USERNAME).ToString()
を読ん
Function Backfill(value As String) As Details
Dim details As Details = Nothing
Dim appSettings As ConfigSettings.AppConfig = ConfigSettings.AppConfig.getConfig()
Dim url As String = appSettings.Settings.BackfillUrl
Dim username As String = appSettings.Settings.BackfillUser
Dim password As String = appSettings.Settings.BackfillPass
Dim expParameters As String = ""
Dim xml As XmlDocument = Nothing
Dim xmlHttp As XMLHTTP = Nothing
Dim nodeList As XmlNodeList = Nothing
Dim node As XmlNode = Nothing
Dim response As String = ""
Dim success As String = ""
'
' REMOVED TO HIDE INFO
expParameters = "<PARAMETERS>" & _
"</PARAMETERS>"
Try
xmlHttp = New XMLHTTP()
xmlHttp.open("POST", url)
xmlHttp.Send(expParameters)
response = xmlHttp.responseText()
xml = New XmlDocument
xml.LoadXml(response)
SaveExperianFile(xml, value)
nodeList = xml.DocumentElement.ChildNodes
node = nodeList.Item(0)
success = node.Attributes.GetNamedItem("success").Value.ToString.Trim
If success.ToLower.Trim = "y" Then
details = SetDetails(xml)
End If
Catch ex As Exception
Finally
If Not xmlHttp Is Nothing Then
xmlHttp.Dispose()
xmlHttp = Nothing
End If
End Try
Return details
End Function
編集
XMLHTTPクラスのコードここに見ることができますhttp://codepaste.net/ymnqsf
ファイルシステムにXMLDocument
を保存すると、何か変なことが起こっているようです。
Private Sub SaveExperianFile(xml As XmlDocument, value As String)
Dim appConfig As ConfigSettings.AppConfig = ConfigSettings.AppConfig.getConfig()
Try
xml.Save(HttpContext.Current.Server.MapPath(appConfig.Settings.SavePath & value & "_backfill.xml"))
Catch ex As Exception
End Try
End Sub
このメソッドを呼び出さないと、セッションは常に設定されます。
質問
あなたはこの動作を引き起こしているものを知っていますか?
何かがセッションをリセットしています。ウェブサービスコードを投稿することは可能でしょうか? –
は 'HttpWebRequest'のコードで更新されていますが、webserviceは' HttpWebRequest'コードを呼び出すこと、セッションを読み込み、 'SQL'データベースに保存することなど何もしません。 –
session.sessionidが同じかどうか確認できますか2番目のリクエストで? – lloydom