【问题标题】:Can't send cookies from vb.net page to php backend无法将 cookie 从 vb.net 页面发送到 php 后端
【发布时间】:2011-05-16 03:44:12
【问题描述】:

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

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

如果存在替代解决方案,我完全赞成(如果有一种方法可以在不需要插件的情况下在 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>

【问题讨论】:

    标签: php vb.net cookies httpwebrequest cookiecontainer


    【解决方案1】:

    我不熟悉 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 .

    承认这不是一个结束一切的解决方案,也可能不是最好的。我不会在很多您可能试图将正面和背面联系起来的事情上使用这个概念,但我看不出彼此之间有太大的伤害。

    【讨论】:

    • 从来没有 PHP cookie 到达 PHP 端(如问题中所述)。而且我不能真正做 javascript,因为我希望这是一个透明的代理 - 例如,我希望代理将所有内容链接到后端,没有任何改变。
    【解决方案2】:

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

    【讨论】:

    • 我认为这与跨域 cookie 处理无关。老实说,在这一点上,使用 ASP VB.Net 更像是一种练习而不是需要——不久之后(谢天谢地!)在该服务器上安装了 PHP,我能够在 PHP 中完美地完成这项工作。实际上,我用它做了一个谷歌代码项目:code.google.com/p/php-transparent-proxy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多