为什么 AJAX 里写入的 cookie 无法显示出来? 我在一个 send.php 里通过 ajax 的方式 写了这句 setcookie("ip",$ips,time()+3600,'/');然后从另外一个页面 print_r($_COOKIE); 却看不到 cookie 数组里 的 ip 这个项目何解? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 检查下在对 cookie 进行赋值前还有没有其他输出? 但是 if(!isset($_COOKIE['ip'])) 又可以检测到这个 cookie存在啊 <?phpsession_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 文本文件里 测试打印 cookie 的 php是在同一浏览器的不同选项卡中运行的吗?如果不是,没有结果是正确的一直到ajax运行的窗口关闭后,再刷新才会有结果(但也要在1小时以内) 你意思是说测试COOKIE的也要在接收ajax参数的这个页面运行才行? 啊,我在同一选项卡打开测试Cookie 的页面现在可以看到那个 ip 了,有点莫名其妙 道理很简单,1、php能取到 cookie 是因为浏览器向php发送了cookie2、php设置的cookie被浏览器保存在内存中3、当浏览器退出,或转向其他网站时,尚未过期的cookie会保存到文件4、浏览器进程间是不能通讯的,而cookie文件也未生成,当然也就看不到cookie了希望我说明白了 如果换成了 session , 那无论如何都看不到,那是怎么回事? test2.php<?phpsession_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 ,但是同一个目录下另一个页面 <?phpsession_start();echo $_SESSION['uid'];?>这里却写不出来这个 session 值!!无论是同一浏览器不同选项卡还是同一选项卡难道也是以上的原因? session 只是将 sessionid 存放在 cookie 里,并且失效期为 0,即离开了就没有了你自己想一下,该不该有 那我想在一个页面里通过ajax获取一个值并且打包到session里,在整个站点其他任何页面获得这个值怎办? 只要你的其他页面是从这个ajax页面跳转出去的,那么session都会存在 我再举个例子:这里的 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<?phpsession_start();$url=$_GET['url'];$_SESSION['url']=$url;?>跟 test2.php 同一目录下的 test.php<?phpsession_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 的值了,并且这个值也写进了文本里,其调用方法跟我以上的都一样,为什么这里可以看到呢? 我知道鸟!!session_start();require(dirname(__FILE__).'ipfun.php');$url=$_GET['url'];$_SESSION['url']=$url;关键在于这句,如果 session_start();后面加上红色这句,就不行了!!可是我的 session_start()已经是写在了最顶部啊? require dirname(__FILE__) . 'ipfun.php'; 应该不是require的问题吧,方便的话把ipfun.php贴出来看看。还有就是用firefox或是chrome看一下cookie(sessionID)是否存在浏览器里了 请问没有安装web服务器如何运行php程序? PHP如何把一个form表单多个值提交到一个字断中 PHP 如何生成XML文件? 关于表单验证函数的不解 请教--php中关于共享内存的应用,有这方面经验的都来看下阿:P谢谢 mysql 内存优化问题 高分送:如何实现网站浏览统计??? 怎样让PHP识别OCR扫描格式的文件? 关于session的过期问题 SMARTY 二次循环的请教 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()已经是写在了最顶部啊?