从php响应以角度接收cookie
我尝试从php中检索cookie已有一段时间了。 在php中,我有以下方法:从php响应以角度接收cookie,php,angularjs,cookies,Php,Angularjs,Cookies,我尝试从php中检索cookie已有一段时间了。 在php中,我有以下方法: 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 \
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。(暂时不要注意我是如何创建cookie的,I now 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()
,但随后我打印控制台.log(data.headers('Set-cookie')代码>我得到空结果。有人有过类似的问题吗
我还尝试:
.then(function (data, status, headers, config) {
console.log(headers('Set-cookie'));
}, function (data, status, headers, config) {
console.log(headers('Set-cookie'));
});
以及:
但没有一个成功。可能是什么问题
我的客户方:
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是什么?设置cookie是对客户端应用程序(例如,运行代码的浏览器)的指令,而不是对代码的指令。
它应该自动将cookie保存到客户端,然后在wach调用中自动发送到服务器。
要获取当前cookies,可以使用$cookies
如果cookie未保存,可能有多种原因,例如,域名可能不匹配,
基本上,为了读取cookie,设置的cookie的所有参数都应该与当前页面匹配,并且到期日期应该在将来(或省略)
好的,找到您的问题,您应该添加端口号,如下所示:
setcookie( "cookie", "$cookie", time() + (10 * 365 * 24 * 60 * 60), "/", "http://localhost:8000" );
我找到了解决问题的方法,这可能不是解决问题的最佳方法,但如果有人遇到同样的问题,这可能会有所帮助
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);
}
我越来越不确定了。不确定这是否是因为我没有从我的created()
函数返回php端的任何内容,或者我调用了$cookies.get(“cookie”)代码>不正确我不认为应该是端口号,因为我的api是localhost:8000,我的客户端是localhost/如果是这样,那么你的api就不能将cookie植入客户端,因为它们被视为完全不同的域,请求只能将cookie发送到localhost:8000托管页面。如果您想在客户端获取cookie,您应该将其移动到localhost:8000下,或者将您的api移动到localhost:800上,并将前端移动到localhost上,然后在那里检索cookie,这是规则,请参见:为什么不将它们作为两个不同的虚拟路径放在同一端口上?e、 g.localhost/api/creation localhost/guestbookstorage/Ang要获取您定义的cookie,只需在控制器中注入$cookies
,然后使用$cookies.get(“cookie”)
…您需要准确地发布客户端的外观以及使用$cookies.get(“cookie”)代码>这样会更容易提供帮助you@ElmerDantas我更新了答案,尝试添加$cookies.get(“cookie”)代码>在不同的地方,虽然我想我应该看它。但是似乎什么都不起作用。您是否可以在控制器上放置一个console.log
,以打印$cookies.get(“cookie”)代码>发出请求,然后刷新页面?也许你会看到它的价值。我担心您无法以您刚才尝试的方式访问该值,因为我注意到您使用的不是同一个域,,,为什么?因为我的php服务器位于localhost:8000中,而我的前端位于localhost上/
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);
}