- - PR -
soapのsession管理について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-29 17:16
caneさんの問題点を十分把握できていないのですが、
WebServiceにおいて、あるメソッドを呼び出した時のパラメータであるユーザーIDを Sessionに格納してセッションが破棄されるまで保持、他のメソッドなどで 取り出しができる状態にしたい。 のであれば、 対象となるWebMethodの属性でEnableSession = trueを設定する メソッド内は 設定するメソッドでは Session["UserID"] = ID; で設定 利用するメソッドでは int UserID = (int)Session["UserID"]; で取得 クライアント側では、たつごろーさんが示したように CookieContainer を設定する こんな形式で利用できるかと思いますが、 こんなことでなければ、無視して下さい。 | ||||||||
|
投稿日時: 2004-12-30 10:59
Os_さん
いろいろ試しているのですが、どうもクッキーの格納、取得が うまくいきません。 長いですがソースコードになります。 クライアントサイドform1 Private Sub login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles login.Click 'Webサービスの戻り値 Dim response As String Dim UID Dim PWD 'Webサービスのインスタンス Dim Loginservice As New WebLogin.Service1 UID = LoginID.Text PWD = TextBox2.Text response = Loginservice.Loginchk(UID, PWD) If response = False Then MsgBox("ログイン情報が間違えてます(ログインID、パスワード、登録IPアドレス)") ElseIf response = True Then Loginservice.CookieContainer = New System.Net.CookieContainer Dim frm As Form2 frm = New Form2 frm.ShowDialog() frm.Dispose() frm = Nothing End If End If End Sub form2(ログイン認証後新しいフォームが出てくる) Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Loginservice As New WebLogin.Service1 RichTextBox1.Text = Loginservice.order_chk End Sub サーバサイド <WebMethod(EnableSession:=True, Description:="ログイン認証処理を行います")> _ Public Function Loginchk(ByVal LoginID As String, ByVal LoginPass As String) As String 'DBConnectionクラスをインスタンス Dim connection As New DBConnection '接続してきたクライアントIP取得処理 Dim hostent As System.Net.IPHostEntry = System.Net.Dns.GetHostByAddress (System.Net.IPAddress.Any) ipaddr = hostent.AddressList(0).ToString 'DB接続を行う情報設定 UID = "hoge" PWD = "hogehoge" DSN = "login" SQL = "Login '" & LoginID & "','" & LoginPass & "','" & ipaddr & "'" Loginchk = connection.Login_chk(UID, PWD, DSN, SQL) Session("Loginchk") = LoginID End Function <WebMethod(EnableSession:=True, Description:="ログイン認証後")> _ Public Function order_chk() As String Dim UID As String Dim tes As Integer UID = Session("Loginchk") Return UID End Function | ||||||||
|
投稿日時: 2004-12-30 11:48
Osです。
全体構成がわかりませんが、示されたソースの中で、 Form2のクラス内(Form2_Loadメソッド内)でローカルにWebサービスのインスタンスを 生成して、Webサービスのメソッドにアクセスしていますが、なぜですか? これでは、元のForm1で生成したSessionにアクセスできないのでは? | ||||||||
|
投稿日時: 2004-12-30 12:14
OSさん
構造としては、form1で認証作業を行い成功時にはform2に切り替わるようにしてあります。 form2ではform1で入力されたIDに基づいたデータを自動的に表示する仕組みにしたかったため Public Function order_chk()メソッドでsession格納したデータを取り出して 情報処理(SQL)を行いform2にreturnで戻す処理にしたいと考えてました | ||||||||
|
投稿日時: 2004-12-30 13:48
試してませんが、Loginserviceをform毎に作るのではなく、もっと広域のスコープに移動したらうまくいくんではないかと思います。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2004-12-30 14:46
たつごろー さん
引用: -------------------------------------------------------------------------------- 試してませんが、Loginserviceをform毎に作るのではなく、もっと広域のスコープに移動したらうまくいくんではないかと思います -------------------------------------------------------------------------------- 私の勉強不足のためご説明がわからないので、もう少し簡単にご教授お願いします。 すいません | ||||||||
|
投稿日時: 2004-12-31 06:27
南部です。
どの部分が分からないのか記述しないと説明のしようがないと思いますし、 caneさんなりにどう解釈したのか記述するといいかもしれません。 で、本題ですが、
1.ログインチェックWebサービスメソッド呼び出し(セッションに格納) 2.承認時にクッキーコンテナ設定 この順番ってOKですか? また、Os_さん、たつごろーさんの回答で解決済みかもしれませんが、 form2のLoginserviceはコードを見る限りクッキーコンテナを 持っていません。 少なくとも、クッキーコンテナは同じものを使用しましょう。 | ||||||||
|
投稿日時: 2005-01-04 09:00
ありがとうございます。
デザインパターンを使うことによりインスタンスをひとつにして データの取得ができるようになりました。 もうひとつ質問です。 フォーム認証をつかいたいのですが、フォーム認証はaspやaspxなどのwebパージでないと 利用できないのですか?(クライアントはexeです) 調べていてもあまり情報がないのでご質問させていただきます。 参照ページ http://www.atmarkit.co.jp/fdotnet/hybooks/vbnet01/vbnet01_01.html |