我在一个 send.php 里通过 ajax 的方式 写了这句 setcookie("ip",$ips,time()+3600,'/');然后从另外一个页面 print_r($_COOKIE); 却看不到 cookie 数组里 的 ip 这个项目何解?
解决方案 »
- 是从远程API专业服务器拿数据快呢,还是从本地服务器拿数据快呢
- 0~9数字组成三位数最多只能重复一次的正则
- 问一个很纠结的问题
- 循环内的公式不一致怎么写一个函数?
- 帮忙修改代码
- 现在最好的模板引擎是什么
- 如何重装PHP服务器
- 如何调用PHP,将以下的内容发送到我指定的email中(并定义subject)???(不是mailto:)请给代码,我对PHP不了解,但系统
- log4php怎么设置只保留一周内的日志
- 求思路:juqery+thinkphp的问答系统
- phpmyadmin的#1045 - Access denied for user 'root'@'localhost' (using password: NO
- 求php5.3.8连接sql2000的驱动文件
session_start();
require(dirname(__FILE__).'/../../config.php');
$ip=GetIP();
$uid=$_GET['uid'];
$adid=$_GET['ad'];
$sqlu="select url,prices from axphp_ad where id=$adid";
$arr1=mysql_query($sqlu,$config);
if($row=mysql_fetch_array($arr1))
{
$url=$row['url'];
}
if(!isset($_COOKIE['ip']))
{
//setcookie("admin", "Y", time() + 3600, '/');
setcookie("ip",$ip,time()+3600,'/'); echo '设置ip cook!';
}
else
{
if(!isset($_COOKIE['aimUrl']))
{
setcookie("aimUrl",$url,time()+3600,'/');
echo '设置ip aimUrl!';
}
else
{
$aimUrl=$_COOKIE['aimUrl'];
if(strpos($aimUrl,$url)===false)
{
$aimUrl+=$url+',';
setcookie("aimUrl",$url,time()+3600,'/');
}
else
{
$ips=$_COOKIE['ip'];
if(strpos($ips,$ip)===false)
{
$ips+=$ip+',';
setcookie("ip",$ips,time()+3600,'/');
}
else
{
exit('已经存在此ip并已访问过该链接');
}
}
}
}
这个页面是被其他页面以 ajax 请求发送过来访问的
接受参数的 from.php<?php$txt='from:'. $ref.' '.$ip.' visiting:'.$url_this;setcookie("ip",$txt,time()+3600,"/");$cki=$_COOKIE['ip'];$f=fopen('ip.txt','w+');
fwrite($f,$cki);
fclose($f);?>
发送请求的 js :
var ref=document.referrer;var url=document.URL;
$.ajax({
type:'GET',
url:'/from.php?ref='+ref+'&url='+url+'&num='+Math.random(),
success:function(msg){
// alert(msg);
},
error:function(){alert('error');}});
测试打印 cookie 的 php :<?php//echo $HTTP_COOKIE_VARS["ip"];print_r($_COOKIE);
?>
就以上三个页面,但是 print_r($_COOKIE); 却看不到 ip 这项,但是$cki 却又获得了 cookie['ip'] 的值,并且写进了 txt 文本文件里
是在同一浏览器的不同选项卡中运行的吗?如果不是,没有结果是正确的
一直到ajax运行的窗口关闭后,再刷新才会有结果(但也要在1小时以内)
1、php能取到 cookie 是因为浏览器向php发送了cookie
2、php设置的cookie被浏览器保存在内存中
3、当浏览器退出,或转向其他网站时,尚未过期的cookie会保存到文件
4、浏览器进程间是不能通讯的,而cookie文件也未生成,当然也就看不到cookie了
希望我说明白了
session_start();$uid=$_GET['uid'];$_SESSION['uid']=$uid;exit($_SESSION['uid']);?>$(function(){
var ref=document.referrer;
$.ajax({
type:'GET',
url:'/test2.php?uid='+uid+'&ad='+ad+'&stn='+stn+'&Ref='+ref+'&num='+Math.random(),
success:function(msg){
alert(msg);
},
error:function(){alert('error');}});});
alert出来 1 ,但是同一个目录下另一个页面 <?php
session_start();echo $_SESSION['uid'];?>这里却写不出来这个 session 值!!无论是同一浏览器不同选项卡还是同一选项卡难道也是以上的原因?
引用ajax js 脚本的 text.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>测试推广</title>
<SCRIPT type=text/javascript src="/templets/default/js/jquery-1.3.2.min.js"></SCRIPT></head><body><a href="http://192.168.1.32/testor.html">返回测试</a><script language="javascript" src="/images/js/sndl.js"></script></body></html>
sndl.js
$(function(){
var ref=document.referrer;var url=document.URL;
$.ajax({
type:'GET',
url:'/test2.php?ref='+ref+'&url='+url+'&num='+Math.random(),
success:function(msg){
// alert(msg);
},
error:function(){alert('error');}});});
test2.php
<?php
session_start();$url=$_GET['url'];$_SESSION['url']=$url;
?>
跟 test2.php 同一目录下的 test.php<?php
session_start();$url=$_SESSION['url'];echo $url;$f=fopen('url.txt','w+');
fwrite($f,$url);
fclose($f);
?>先运行 text.html, 然后 再在同一浏览器不同选项卡里打开 test.php (这个test.php 跟 test2.php 毫无关联,也没有任何跳转链接或语句)
就可以看见 url 的值了,并且这个值也写进了文本里,其调用方法跟我以上的都一样,为什么这里可以看到呢?
$url=$_GET['url'];$_SESSION['url']=$url;
关键在于这句,如果 session_start();后面加上红色这句,就不行了!!可是我的 session_start()已经是写在了最顶部啊?