friendlessstar 发表于 2017-3-29 11:03:06

PHP Cookie与Session跨域访问、传递

  <script type="text/javascript"><!--google_ad_client = "pub-0241434510974184";/* 博客文章广告728x90, */google_ad_slot = "7316585398";google_ad_width = 728;google_ad_height = 90;// --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
  晚上特意花了个时间,自己动手试了下。
在项目中一直碰到Cookie跨域访问及SessionId跨域传递问题

范例:
index.php
  <?phpinclude_once('a.php');session_start();$_SESSION['k'] = uniqid();setcookie("sess", session_id(), time()+3600, "/", ".ipggg.com"); echo "index.php<br />/n";echo $_SESSION['k'].'<br />';echo "<mce:script src="http://www.ipggg.com/test/b.php" mce_src="http://www.ipggg.com/test/b.php"></mce:script>";var_dump($_COOKIE); echo "<br />/n";?>
  a.php
  <?phpheader('Content-type: text/html; charset=utf8');/* 我注释掉P3P还是可以,难道是因为我RP太高?!用IE7或者火狐都可以访问到值; 使用环境Vista home + xampp-win32-1.7.1套装*///header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); /* memory_limit是设置PHP使用内存时空间,一般设置为内存的四分之一,应该就查不多了。 */@ini_set('memory_limit', '64M');/* 指定会话模块是否在请求开始时自动启动一个会话。默认为 0(不启动)。 */@ini_set('session.auto_start', 0);/* 以分钟数指定缓冲的会话页面的存活期,此设定对 nocache 缓冲控制方法无效。默认为180 */@ini_set('session.cache_expire', 180);/* 指定是否启用透明 SID 支持。默认为 0(禁用)。包含着会话名以及会话 ID 的常量,格式为 "name=ID",或者如果会话 ID 已经在适当的会话 cookie 中设定时则为空字符串。 */@ini_set('session.use_trans_sid', 0);/* 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)。 */@ini_set('session.use_cookies', 0);/* 标志着作为访问的Cookie只能通过HTTP协议。不过使用AJAX用PHP访问就可,纯JavaScript无效!只能防范一点点,而且不是所有浏览器都支持。 */@ini_set("session.cookie_httponly", 1);/* 这个应该不用多说,PHP错误开关 */@ini_set('display_errors', 1);?>
  b.php
  <?phpinclude_once('a.php');session_id($_COOKIE['sess']);session_start();setcookie("test", $_SESSION['k'], time()+3600, "/", ".ipggg.com"); ?>
  设置C:/WINDOWS/system32/drivers/etc/hosts
引用
127.0.0.1ipggg.com
127.0.0.1 www.ipggg.com

  测试方法:
直接打开http://ipggg.com/程序存放目录/index.php

PS:
1、使用火狐搭配firebug进行调试;
2、官方建议使用strip_tags输出HTML,防范XSS
页: [1]
查看完整版本: PHP Cookie与Session跨域访问、传递