コメント |
@DIV
@C:red(サーバーからの Set-Cookie が、パス無して指定されていない場合、クッキーの対象が
全てのパスになってしまうので、同じ php に対してアクセスする場合は良いのですが、同じデ
ィレクトリ内で別の php にアクセスした場合にクッキーが引き継がれないので、プログラムで
対応する必要があります)
@END
@HTML
<b class=sttl>関連する記事</b>
<a href="http://winofsql.jp/VA003334/sh_web100618110711.htm" target="_blank">VBScript/PHP クッキーデータが自動的に受け渡しされる事のテスト</a>
@HEND
@DIV
Module MyModule
' ********************************************************
'
' ********************************************************
Sub Main()
Dim strUrlDir As String = "http://localhost/web/test"
@C:green(' ****************************************************************
' HttpWebRequest のインスタンス
' コンストラクタでは無く、Create メソッドを使用する
' ****************************************************************)
Dim strUrl1 As String = "http://localhost/web/test/sv1.php"
Dim req As System.Net.HttpWebRequest = _
CType(System.Net.WebRequest.Create(strUrl1), System.Net.HttpWebRequest)
@C:green(' クッキー保存用)
Dim cc As System.Net.CookieContainer = New System.Net.CookieContainer()
@C:green(' サーバーからのクッキーを保存させる)
req.CookieContainer = cc
req.Method = "GET"
@C:green(' HttpWebResponse のインスタンスを取得[ 送信 ])
Dim res As System.Net.HttpWebResponse = req.GetResponse()
@C:green(' ****************************************************************
' 読み出し
' ****************************************************************)
Dim resStream As System.IO.Stream = res.GetResponseStream()
Dim sr As New System.IO.StreamReader(resStream)
Console.WriteLine( sr.ReadToEnd() )
@C:green(' StreamReader オブジェクトと、その基になるストリームを閉じる)
sr.Close()
@C:green(' ****************************************************************
' PHP 側の setcookie のデフォルトで、全てのパスに対して
' 登録されてしまうので、ディレクトリ対象として設定しなおす
' ****************************************************************)
Dim strHeaders As String = cc.GetCookieHeader(New Uri(strUrl1))
strHeaders = strHeaders.Replace(";", ",")
cc.SetCookies( New Uri(strUrlDir), strHeaders )
Dim strUrl2 As String = "http://localhost/web/test/sv2.php"
req = CType(System.Net.WebRequest.Create(strUrl2), System.Net.HttpWebRequest)
req.CookieContainer = cc
req.Method = "GET"
res = req.GetResponse()
resStream = res.GetResponseStream()
sr = New System.IO.StreamReader(resStream)
Console.WriteLine( sr.ReadToEnd() )
sr.Close()
@C:green(' ****************************************************************
' 同一ディレクトリ内のクッキーを継承したい場合はその都度実行
' ****************************************************************)
strHeaders = cc.GetCookieHeader(New Uri(strUrl2))
strHeaders = strHeaders.Replace(";", ",")
cc.SetCookies( New Uri(strUrlDir), strHeaders )
End Sub
End Module
@END |