我有这个方法:
public function created()
{
$datetime = date_create()->format('Y-m-d H:i:s');
$json =file_get_contents('php://input');
var_dump($json);
$decoded = json_decode($json, true);
$cookie="";
$obj=new \stdClass();
if($decoded['cookie']==""){
$cookie=$random = rand(1,1000);
setcookie( "cookie", "$cookie", time() + (10 * 365 * 24 * 60 * 60), "/", "http://localhost" );
}
else{
$cookie=$decoded['cookie'];
}
$user=[
'name'=>$decoded['name'],
'surname'=>$decoded['surname'],
'email'=>$decoded['email'],
'review'=>$decoded['review'],
'time'=>$datetime,
'cookie'=>$cookie,
];
$obj->cookie=$cookie;
DatabaseModel::newuser($user);
//return response()->json($cookie);
}
如果不存在则创建cookie,我在响应头中看到它。 (现在不要注意我如何创建cookie,我现在rand()函数不是正确的方法,它只是用于测试)
在我的角度方面,我有:
function PostReview(JSONObject) {
if (JSONObject != null) {
debugger;
$http({
url: 'http://localhost:8000/creation',
method: "POST",
data: JSONObject,
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8;",
"Accept": "application/json"
},
})
.then(function (data) {
console.log(data.headers('Set-cookie'));
}, function (data) {
console.log(data.headers('Set-cookie'));
});
}
}
我想发布我的JSON对象并通过响应收到cookie。但是我很困惑。我尝试使用.success()
,但已弃用,因此我使用的是.then()
,但是我打印console.log(data.headers('Set-cookie'));
我得到了null结果。有没有人有类似的问题?
我也尝试过:
.then(function (data, status, headers, config) {
console.log(headers('Set-cookie'));
}, function (data, status, headers, config) {
console.log(headers('Set-cookie'));
});
和
.then(function(response) {
if (response.data == 'ok') {
$cookies['X-AUTH-TOKEN']=response.headers('X-AUTH-TOKEN');
// below put,put,putObject Cookies value is valid for Angular version >= 1.4
var $cookie= $cookies.putObject('X-AUTH-TOKEN',response.headers('X-AUTH-TOKEN'));
console.log($cookie);
debugger;
}
});
但它们都没有奏效。这可能是什么问题?
我的客户方:
function PostReview(JSONObject) {
if (JSONObject != null) {
debugger;
$http({
url: 'http://localhost:8000/creation',
method: "POST",
data: JSONObject,
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8;",
"Accept": "application/json"
}
})
}
}
在我的控制器中:
$scope.Cookie = $cookies.get('cookie');
$scope.$watch('Cookie', function() {
$scope.Cookie = $cookies.get('cookie');
});
关于跨域cookie的问题?
答案 0 :(得分:0)
set-cookie是指向客户端应用程序的指令(例如运行代码的浏览器) - 而不是代码。 它应该自动将cookie保存到您的客户端,然后它将在wach调用中自动发送到服务器。 要获取当前的cookie,您可以使用$ cookies。
如果没有保存cookie,可能有多种原因,例如,也许域名不匹配, 基本上,为了读取cookie,set-cookie的所有参数都应与当前页面匹配,并且到期日期应该是将来(或省略)。
好的,找到你的问题,你应该添加端口号,如下:
String url = "http://www.air-intra.com/apps/air-app/agregar.php?token=" + Token_Recibido + "&codiart=" + codigo + "&oper=Q&renglon=" + reglo + "";
HttpHandler she = new HttpHandler();
JSONObject jsonStr = she.makeServiceCall(url);
try {
JSONObject jsonObj = new JSONObject((Map) jsonStr);
JSONArray contacts = jsonObj.getJSONArray("PRR");
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String codig = c.getString("codigo");
String des = c.getString("descrip");
String prec = c.getString("precio");
String reglon = c.getString("renglon");
Log.d("REGLON", String.valueOf(reglon));
HashMap<String, String> contacto = new HashMap<>();
contacto.put("codigo", codig);
contacto.put("descrip", des);
contacto.put("precio", prec);
contacto.put("renglon", reglon);
reg = "" + reglon;
prod.add(contacto);
答案 1 :(得分:0)
我找到了解决问题的方法,它可能不是解决问题的最佳方法,但如果有人遇到同样的问题,它可能会有所帮助。
function PostReview(JSONObject) {
if (JSONObject != null) {
$http({
url: 'http://localhost:8000/creation',
method: "POST",
data: JSONObject,
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8;",
"Accept": "application/json",
"crossDomain": true,
"withCredentials": true
}
}).then(function (response) {
if(response.data.cookie_value===undefined){
var info = JSON.parse(JSONObject);
console.log(info.cookie);
$cookies.put('userCookie', info.cookie);
}
else{
console.log(response.data.cookie_value);
$cookies.put('userCookie', response.data.cookie_value);
}
$rootScope.savedInfo=JSON.parse(JSONObject);
});
}
}
如果不存在,我从响应方法设置cookie,如果存在,则使用我的json对象中的值。
在php方面,我检查我发送的cookie是否为空,如果是,则创建cookie。看起来并不难,但我花了很多时间在这上面。
public function created()
{
$date = new DateTime();
$date->setTimeZone(new DateTimeZone("Europe/Vilnius"));
$get_datetime = $date->format('d.m.Y H:i:s');
$datetime = date_create()->format('Y-m-d H:i:s');
$json =file_get_contents('php://input');
$decoded = json_decode($json, true);
$cookie="";
$obj=new \stdClass();
if($decoded['cookie']==" "){
$cookie_name = "user";
$cookie_value =$random = md5(rand(1,1000));
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
$_COOKIE[$cookie_name]=$cookie_value;
$obj->cookie_value=$cookie_value;
}
else{
$cookie_value=$decoded['cookie'];
}
$user=[
'name'=>$decoded['name'],
'surname'=>$decoded['surname'],
'email'=>$decoded['email'],
'review'=>$decoded['review'],
'time'=>$datetime,
'cookie'=>$cookie_value,
];
// $obj->cookie=$cookie;
DatabaseModel::newuser($user);
return response()->json( $obj);
}