无法将vb.net页面的cookie发送到php后端

时间:2011-05-16 03:44:12

标签: php vb.net cookies httpwebrequest cookiecontainer

我正在尝试为跨域AJAX POST查询创建代理,为此,我需要将我的客户端(浏览器)请求中的cookie添加到我发送给我的POST请求中PHP后端,即使用HttpWebRequest。为此,我将每个Request.Cookie添加到HttpWebRequest.CookieContainer对象中。出于某种原因,我添加到它的cookie都没有到达我的PHP后端。

我从一些搜索中了解到CookieContainer对象依赖于URI(我不知道如何解释它!),所以也许这就是我的问题的原因。但是,我已经尝试将我的cookie上的域设置为不同的东西,但它似乎并没有影响它。所以URI可能意味着与Cookie的Domain参数不同。如果是这样的话,我就被困住了。

如果存在替代解决方案(如果有一种方法可以在asp.net中执行自动跨域代理而不需要插件,那么这将挽救我的生命!)。

这是我正在使用的代码。

<%@ Page Language="VB" validateRequest="false" Debug="true" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Dim displayValues As New StringBuilder()
            Dim CookieJar as New CookieContainer
            Dim objCookieColl as HttpCookieCollection
            Dim objThisCookie As HttpCookie
            Dim myCookie As HttpCookie
            Dim arr1() As String
            Dim myCount as Integer

            objCookieColl = Request.Cookies
            arr1 = objCookieColl.AllKeys
            Dim postedValues As NameValueCollection = Request.Form
            Dim nextKey As String
            For i As Integer = 0 To postedValues.AllKeys.Length - 1
                nextKey = postedValues.AllKeys(i)
                If nextKey.Substring(0, 2) <> "__" Then
                    displayValues.Append("&" & nextKey)
                    displayValues.Append("=")
                    displayValues.Append(Server.UrlEncode(postedValues(i)))
                End If
            Next

            Dim uri As New Uri("http://www.otherdomain.com/subfolder/backend.php")
            Dim data As String = displayValues.ToString
            If (uri.Scheme = uri.UriSchemeHttp) Then
                Dim postRequest As HttpWebRequest = HttpWebRequest.Create(uri)
            For index As Integer = 1 to UBound(arr1)
                objThisCookie = objCookieColl(arr1(index))
                Dim tempCookie As New Cookie(objThisCookie.Name, objThisCookie.Value, objThisCookie.Path, Request.ServerVariables("HTTP_HOST"))
                myCount = myCount + 1
                CookieJar.Add(tempCookie)
            Next
                postRequest.CookieContainer = CookieJar
                postRequest.Method = Request.HttpMethod
                postRequest.ContentLength = data.Length
                postRequest.ContentType = "application/x-www-form-urlencoded"
                Dim writer As New StreamWriter(postRequest.GetRequestStream())
                writer.Write(data)
                writer.Close()

                Dim myResponse As HttpWebResponse = postRequest.GetResponse()
                Dim x As Integer
                While x < myResponse.Headers.Count
                    Response.AppendHeader(myResponse.Headers.Keys(x), myResponse.Headers(x))
                    x = x + 1
                End While
                Dim reader As New StreamReader(myResponse.GetResponseStream())
                Dim responseString As String = reader.ReadToEnd()
                myResponse.Close()
                Response.Write(responseString)

            End If
        End If
    End Sub

</script>

2 个答案:

答案 0 :(得分:0)

我不熟悉ASP如何设置,存储和处理cookie。但是在你的PHP后端试试

<?php
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
?>
通过这种方式,您可以看到PHP是否发现任何远程看起来像您尝试阅读的cookie的cookie。我不得不说,混合这样的语言并不是我所建议的,尽管我确信这种需要背后有合适的逻辑。我可以建议一个可能的选择。用一些JavaScript填补空白。将变量设置为您希望它们存储在cookie中,然后使用JavaScript设置cookie。 http://www.w3schools.com/JS/js_cookies.asp以获取如何通过JavaScript设置cookie的参考我用PHP知道我可以使用JavaScript设置一个cookie,所以希望这有助于一些,以及我对ASP的了解你应该能够在那里使用JavaScript同样。

授予它这不是一个尽头的全部解决方案,可能也不是最好的。我不会在很多事情上使用这个概念,你可能试图连接正面和背面,但我不能看到彼此之间有太大的伤害。

答案 1 :(得分:0)

你的意思是你有一个使用.Net运行的站点(在你的情况下为asp),然后你想将cookie传递给另一个运行PHP的应用程序?我认为cookie不能与另一个“站点”共享,因为这不应该被完成。它经常被用作黑客的攻击媒介,因此我认为你服务器正在试图阻止它。