我在一个 send.php 里通过 ajax 的方式 写了这句   setcookie("ip",$ips,time()+3600,'/');然后从另外一个页面  print_r($_COOKIE); 却看不到 cookie 数组里 的 ip 这个项目何解?

解决方案 »

  1.   

    检查下在对 cookie 进行赋值前还有没有其他输出?
      

  2.   

    但是  if(!isset($_COOKIE['ip'])) 又可以检测到这个 cookie存在啊
      

  3.   

    <?php
    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 请求发送过来访问的
      

  4.   

    我再用个简单的给说明一下我的意图:
    接受参数的 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 文本文件里
      

  5.   

    测试打印 cookie 的 php
    是在同一浏览器的不同选项卡中运行的吗?如果不是,没有结果是正确的
    一直到ajax运行的窗口关闭后,再刷新才会有结果(但也要在1小时以内)
      

  6.   

    你意思是说测试COOKIE的也要在接收ajax参数的这个页面运行才行?
      

  7.   

    啊,我在同一选项卡打开测试Cookie 的页面现在可以看到那个 ip 了,有点莫名其妙
      

  8.   

    道理很简单,
    1、php能取到 cookie 是因为浏览器向php发送了cookie
    2、php设置的cookie被浏览器保存在内存中
    3、当浏览器退出,或转向其他网站时,尚未过期的cookie会保存到文件
    4、浏览器进程间是不能通讯的,而cookie文件也未生成,当然也就看不到cookie了
    希望我说明白了
      

  9.   

    如果换成了 session , 那无论如何都看不到,那是怎么回事?
      

  10.   

    test2.php<?php
    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 值!!无论是同一浏览器不同选项卡还是同一选项卡难道也是以上的原因?
      

  11.   

    session 只是将 sessionid 存放在 cookie 里,并且失效期为 0,即离开了就没有了你自己想一下,该不该有
      

  12.   

    那我想在一个页面里通过ajax获取一个值并且打包到session里,在整个站点其他任何页面获得这个值怎办?
      

  13.   

    只要你的其他页面是从这个ajax页面跳转出去的,那么session都会存在
      

  14.   

    我再举个例子:这里的 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 的值了,并且这个值也写进了文本里,其调用方法跟我以上的都一样,为什么这里可以看到呢?
      

  15.   

    我知道鸟!!session_start();require(dirname(__FILE__).'ipfun.php');
    $url=$_GET['url'];$_SESSION['url']=$url;
    关键在于这句,如果 session_start();后面加上红色这句,就不行了!!可是我的 session_start()已经是写在了最顶部啊?
      

  16.   

    require dirname(__FILE__) . 'ipfun.php';
      

  17.   

    应该不是require的问题吧,方便的话把ipfun.php贴出来看看。还有就是用firefox或是chrome看一下cookie(sessionID)是否存在浏览器里了