Не могу отправить куки со страницы vb.net на бэкэнд php - PullRequest
1 голос
/ 16 мая 2011

Я пытаюсь создать прокси для междоменных запросов POST AJAX, и для этого мне нужно добавить файлы 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>

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

Вы имеете в виду, что у вас есть сайт, который работает с использованием .Net (asp в вашей ситуации), а затем вы хотите передать cookie другому приложению, работающему на PHP? Я думаю, что куки не могут быть переданы другому «сайту», так как это не должно быть сделано. Он часто используется как вектор атаки хакеров, и поэтому я бы сказал, что ваш сервер пытается это предотвратить.

0 голосов
/ 25 мая 2011

Я не знаком с тем, как ASP устанавливает, хранит и обрабатывает файлы cookie. Но на вашем PHP-бэкенде попробуйте

<code><?php
echo "<pre>";
print_r($_COOKIE);
echo "
"; ?>

таким образом вы можете увидеть, находит ли PHP даже какие-либо куки, которые удаленно выглядят как куки, которые вы пытаетесь прочитать. Я должен сказать, однако, что смешивать языки, как это, я бы не советовал, хотя я уверен, что за этой потребностью стоит приличная логика. Могу ли я предложить возможную альтернативу. Устранить разрыв с помощью, возможно, немного JavaScript. Установите ваши переменные так, как вы хотите, чтобы они сохранялись в cookie, а затем используйте JavaScript для установки cookie. http://www.w3schools.com/JS/js_cookies.asp для справки о том, как настроить cookie-файл с помощью JavaScript. Я знаю, что с помощью PHP. Я могу извлечь cookie-файл, который я установил с помощью JavaScript, так что, надеюсь, это поможет некоторым, и что я знаю о ASP, вы сможете использовать JavaScript там тоже.

Да, это еще не все, может быть и не лучшее решение. Я бы не использовал эту концепцию во многих вещах, которые вы, возможно, пытаетесь соединить спереди и сзади, но я не вижу большого вреда друг другу.

...