我正在尝试为跨域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>
答案 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不能与另一个“站点”共享,因为这不应该被完成。它经常被用作黑客的攻击媒介,因此我认为你服务器正在试图阻止它。