cookie与session跨域登陆代码(ie6,ie7,firefox)

 更新时间:2016年11月25日 15:11  点击:2255

frameset里面,也就是里面的frame是来自第三方站点(不同ip或不同域名),那么默认情况下ie会自动禁用这些站点的cookie,也就是在请求某url时在http header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏览器的。

但象ie 6.0和ie 7.0有个自己的标准.要支持p3p,ie 6的缺省隐私等级设置为"中"——即"阻止没有合同隐私策略的第三方cookie"。而在用户浏览a.php教程时 a.com写入的为第一方cookie,其嵌入的iframe指向b.php.这时b.com写入的就为第三方cookie了,所以它是被ie当在了大门外。

所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器.

好了,不多讲了,直接讲解决方案.

php的程序

可以直接在b网站中写入
<?php
header('p3p: cp="cura adma deva ps教程ao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"')
?>
这样就能接受第三方的cookie啦。

lighttpd的服务器

server.modules    = ("mod_setenv")

setenv.add-response-header = ( "p3p" => "cp='cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor'")

apache的服务器

<virtualhost>

header set p3p 'cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'

</virtualhost>

iis的服务器
增加一个网站http头来解决问题;
管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
然后输入头名:p3p
输入头内容:cp=cao psa our

如果要登陆就如下设置

setcookie('auth_member_string', 0, time()+3600,'/',$cfg['domain']);
 setcookie('auth_member_name',0,time()+3600,'/',$cfg['domain']);
 setcookie('auth_member_realname',0,time()+3600,'/',$cfg['domain']);

登出

setcookie('auth_member_string', 0, time()-1,'/',$cfg['domain']);
 setcookie('auth_member_name',0,time()-1,'/',$cfg['domain']);
 setcookie('auth_member_realname',0,time()-1,'/',$cfg['domain']);

下面来看一个测试实例

我只写一个大概,为了测试的方便,先编辑hosts文件,加入测试域名(c:windowssystem32driversetchosts)

127.0.0.1        www.a.com
127.0.0.1        www.b.com

首先:创建 a_setcookie.php 文件,内容如下:

<?php
//header('p3p: cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"');

setcookie("test", $_get['id'], time()+3600, "/", ".a.com");
?>

然后:创建 a_getcookie.php 文件,内容如下:

<?php
var_dump($_cookie);
?>

最后:创建 b_setcookie.php 文件,内容如下:

<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>

----------------------------

三个文件创建完毕后,我们通过浏览器依次访问:

http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。

然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:

<?php 
header('p3p: cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'); 

setcookie("test", $_get['id'], time()+3600, "/", ".a.com"); 
?>

再次通过浏览器依次访问:

http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。

末了补充一句,似乎只有ie对跨域访问cookie限制比较严格,上述代码在firefox下测试,即使不发送p3p头信息,也能成功

这款文件上传代码是一个超级简单的上传代码,也是没进行过任何安全处理,这款php文件上传代码只适合学习使用哦
 代码如下 复制代码
header("content-type: text/html; charset=utf-8");
?>
<form method="post" action="./uploadaction.php" enctype="multipart/form-data" name="form">
       <input type="file" name="upfile" id="myfile" />
    <input type="submit" name="submit" value="上传" />
</form>

//uploadaction.php

<?php

 代码如下 复制代码
  header("content-type:text/html; charset=utf-8");
   if(!empty($_files))
  {
   $date= date("ymdhis",time());
   $fileinfo=$_files['upfile'];
   foreach($_files['upfile'] as $name=>$value)
    echo $name.'='.$value.'<br>';
   $filesavename='./file/'.$date.$fileinfo['name'];
   move_uploaded_file($fileinfo['tmp_name'],$filesavename);
   echo $fileinfo['tmp_name'].'<br>';
   echo "上传成功<br>";
   echo "文件位置: $filesavename";
  }
php获取ip地址详细信息我们以前都是只提供简单的如果getip一样的函数去获取用户IP地址,下面这代码是获取用户IP地址的详细详细信息,如:是来自哪里。
 代码如下 复制代码

function getip ()
        {
                if (getenv('http_client_ip')) {
                        $ip = getenv('http_client_ip');
                } else if (getenv('http_x_forwarded_for')) {
                        $ip = getenv('http_x_forwarded_for');
                } else if (getenv('remote_addr')) {
                        $ip = getenv('remote_addr');
                } else {
                        $ip = $_server['remote_addr'];
                }
                return $ip;
        }

 

function getipaddres ($ip = '')
        {
                if($ip == ''){
                        $ip = getip();
                }
                if($ip == '127.0.0.1'){
                        return $ip_addres = '本地机器';
                }
                $recordlength = 17+22+13+47+12+1;
                $ret = ereg('^([0-9]+).([0-9]+).([0-9]+).([0-9]+)$', $ip, $ips教程ection);
                if($ret == false){$ip_addres = 'ip地址有错';}
                for($i = 1; $i <= 4; $i ++){
                        if($ipsection[$i] > 255){
                                $ip_addres = 'ip地址有错';
                        } else {
                                $thisip .= sprintf('%03.0f', $ipsection[$i]). (($i<4) ? '.' : '');
                        }
                }
                $fp= fopen($obj['rootdir'].'data/ip.txt', 'rb');
                if($fp == null){
                        $ip_addres = 'ip记录文件打开出错';
                }
                fseek($fp, 0, seek_end);
                $datafieldbegin = 0xc2;
                $recordcount = floor((ftell($fp)-$datafieldbegin)/$recordlength);
                if($recordcount <= 1){
                        $ip_addres = 'ip记录文件打开出错';
                } else {
                        $rangb = 0;
                        $range = $recordcount;
                        while($rangb<$range-1){
                                $recno = floor(($rangb+$range)/2);
                                fseek($fp,$recno*$recordlength+$datafieldbegin, seek_set);
                                $buf = fread($fp, $recordlength);
                                if(strlen($buf) == 0){
                                        return false;
                                }
                                $startip = (substr($buf, 0, 17));
                                $endip = trim(substr($buf, 17, 22));
                                $country = trim(substr($buf, 17+22, 13));
                                $local = trim(substr($buf, 17+22+13, 47));
                                if (strcmp($thisip, $startip) >= 0 && strcmp($thisip, $endip)<=0){
                                        break;
                                }
                                if(strcmp($thisip, $startip) > 0){
                                        $rangb = $recno;
                                } else {
                                        $range = $recno;
                                }
                        }
                        if(!($rangb < $range - 1)){
                                $ip_addres= '未知地址!';
                        } else {
                                $ip_addres = $country;
                                $ip_addres .= $local;
                        }
                }
                fclose($fp);
                return $ip_addres;
        }

// 调用 方法
echo getipaddres();

接口(interface)是抽象方法和静态常量定义的集合。

接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。

接口中没有其它类型的内容。

我们先写接口的定义,下面的例子是接口的一个简单写法。

view sourceprint?1 interface 接口名{ 

2 }

下面的例子定义了一个接口 user ,这个接口中有两个抽象方法,getname() 和 setname()。能看到接口的写法和类很相似。

view sourceprint?1 <? 

2 interface user { 

3     function getname(); 

4     function setname($_name);    

5 } 

6 ?>

注意,在接口中只能有抽象方法。如果在接口中出现了非抽象方法,会报错如下:

interface function user::setname() cannot contain body in ……….

view sourceprint?1 <? 

2 interface user { 

3     function getname(); 

4     function setname($_name){}   

5 } 

6 ?>

程序运行如下:

view sourceprint?1 fatal error: interface function user::setname() cannot contain body in e:phpprojects est.php on line 4

在接口中的抽象方法只能是public的,默认也是public权限。

并且不能设置成 private 或者 protected 类型。

否则会报错如下:

access type for interface method user::setname() must be omitted in —on line —

在接口中,访问类型必须忽略。

view sourceprint?1 <? 

2 interface user { 

3     public function getname(); 

4     private function setname($_name);    

5 } 

6 ?>

程序运行如下:

view sourceprint?1 fatal error: access type for interface method user::setname() must be omitted in e:phpprojects est.php on line 4

protected访问权限也会有问题

view sourceprint?1 <? 

2 interface user { 

3     public function getname(); 

4     protected function setname($_name);  

5 } 

6 ?>

程序运行如下:

view sourceprint?1 fatal error: access type for interface method user::setname() must be omitted in e:phpprojects est.php on line 4

即使abstract 和 final 修饰符不能修饰接口中的抽象方法。

view sourceprint?1 <? 

2 interface user { 

3     final function getname(); 

4     abstract  function setname($_name);  

5 } 

6 ?>

可以根据缓存开启与否,有如下几种不同的写法:

注:以下代码都未考虑ie缓存必须大于256字节才输出的问题,如在ie下测试,请在代码开始加一句:"echo str_repeat(' ',256)"

写法1:
output_buffering = off
implicit_flush=off


for($i=0;$i<10;$i++) {
   echo $i.'<br />';
   flush();
   sleep(1);
}

 

写法2:
output_buffering = on
implicit_flush=off


for($i=0;$i<10;$i++) {
   echo $i.'<br />';
   ob_flush();
   flush();
   sleep(1);
}

 

[!--infotagslink--]

相关文章

  • phpems SQL注入(cookies)分析研究

    PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • JS使用cookie实现DIV提示框只显示一次的方法

    本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法。分享给大家供大家参考,具体如下:这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起...2015-11-08
  • PHP分布式框架如何使用Memcache同步SESSION教程

    本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • vue项目中js-cookie的使用存储token操作

    这篇文章主要介绍了vue项目中js-cookie的使用存储token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-14
  • 详解C#中的session用法

    这篇文章主要介绍了C#中的session用法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Python3使用Selenium获取session和token方法详解

    这篇文章主要介绍了Python3使用Selenium获取session和token方法详解,需要的朋友可以参考下...2021-02-17
  • 什么是cookie?js手动创建和存储cookie

    什么是cookie? cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。 有关cookie的例子: 名字 cookie 当访...2014-05-31
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
  • python爬虫用request库处理cookie的实例讲解

    在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21
  • PHP中如何使用session实现保存用户登录信息

    session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
  • Vue使用axios引起的后台session不同操作

    这篇文章主要介绍了Vue使用axios引起的后台session不同操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
  • 基于C#后台调用跨域MVC服务及带Cookie验证的实现

    本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下...2020-06-25
  • php中session常见问题分析

    PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 引用 代...2016-11-25
  • php设置session生存时间详解

    要设置php生存有效时间我们可以利用session_set_cookie_params函数或修改php.ini文件哦,下面小编来介绍一下。 第一种方法:session_set_cookie_params 函数原型 voi...2016-11-25
  • chrome监听cookie变化与赋值问题

    这篇文章主要介绍了chrome监听cookie变化与赋值问题,cookie监听与赋值操作需要manifest文件里声明权限问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-22
  • jQuery使用cookie与json简单实现购物车功能

    这篇文章主要介绍了jQuery使用cookie与json简单实现购物车功能的方法,介绍了jQuery实现购物车的步骤与关键代码,需要的朋友可以参考下...2016-04-18
  • 详解Document.Cookie

    这篇文章主要介绍了详解Document.Cookie的相关资料,需要的朋友可以参考下...2015-12-27