我在header.php文件中有这个php脚本,将HTTP标头发送到python脚本,并将GUID设置为会话cookie:
<?php
ob_start();
function guid(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
}
$UA = $_SERVER['HTTP_USER_AGENT'];
$REF = $_SERVER['HTTP_REFERER'];
$IP = $_SERVER['REMOTE_ADDR'];
$GUID = guid();
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if (!isset($_COOKIE["name"]))
setcookie('name',$GUID);
//echo $UA;
//echo $REF;
//echo $IP;
//echo $GUID;
echo exec("python /var/www/html/oscommerce-2.3.3.4/header_sender.py -u '$UA' -r '$REF' -i '$IP' -c '$GUID' -p '$actual_link' 2>&1");
ob_end_flush();
?>
我看到的问题是,这会为同一会话中的每个页面加载生成一个新的GUID - 会话cookie似乎没有存储。
问题是什么? 感谢
答案 0 :(得分:1)
好像你没有声明session_start()
;
编辑:
由于您未使用$_SESSION[" "]
,而是使用$_COOKIE[" "]
。
您似乎没有通过time() + x seconds
setcookie('name',$value,time()+..);
答案 1 :(得分:1)
当你想要使用会话时首先需要你从session_start()
开始,它应该在启动php标签之后在页面的第一行使用,因为如果你在中间或结尾或任何其他地方使用它会出现错误标题已经发送,出现此错误的原因是您在代码之间使用了session_start()
函数并且在代码之间留下了任何空格,因此发生了此错误
答案 2 :(得分:0)
这里不是问题,但是我对PHP cookie的搜索未设置会导致我出现在这里,所以请回答随之而来的其他人。
还请注意您如何设置到期时间(如果有)。我本来就是这样设置的:
setcookie(self::$tokenCookie, $response['refreshToken'], 86400 * 365, "/");
目的是将其设置为将来的一年(86400 * 365)。但是,这距时代开始(1970年)只有1年。要从 NOW 获得1年,请使用以下方法:
setcookie(self::$tokenCookie, $response['refreshToken'], time() + (86400 * 365), "/");
有点迟了,但是它使我绊倒了,并造成了一些挫败感,因此希望这可以帮助其他人挽救这种挫败感。