首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
183 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
31
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-08-07
IE下PHP iframe跨域导致session丢失问题的解决方法
IE下PHP iframe跨域导致session丢失问题的解决方法一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况)。主要是session无法被保存的问题,下面把个人的解决过程分享个大家今天搞的一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况)。 很明显,session无法被保存。但是直接在地址栏打开那个登录页面,一切都正常啊。真是奇怪啊。 在网上搜索了一下。发现这个问题还真有不少人提及到。最后的解决方法是在那个登录页面里加上以下代码: 复制代码代码如下:header('P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"'); session_start(); 可能这个问题跟我的登录页面是采用javascript的location跳转也有关。但没有深入测试研究。 拓展阅读: 今天在处理腾讯朋友应用的时候,测试给我发来个工单,说应用在IE7 上无法使用.出现登陆超时错误. 第一反应是session丢失了. 于是上网找了下 IE7 iframe session丢失问题.后来找到如下文章,问题解决: 昨天,我在校内上做的时间日记终于上线了。上线第一天有80多个用户安装,但却以外收到不少用户的反馈说应用不可用。我之前都是在firefox上开发的(估计校内工作人员也是用firefox审核的),在使用IE7测试时,却发现首页之外的页面全都无法正常打开。 在网上查找了许多资料,发现在IE7中存在这样的问题:如果页面中存在着一个或多个iframe的子页面,那么在子页面中创建session可能无 法成功,这样session数据就无法和其他页面所共享。在开发校内、51应用时,假设采用iframe方式,很可能会遇到这样的问题。而且这个问题只存 在于IE7浏览器中,我在firefox, IE6和chrome等浏览器中测试均没有问题。 解决方案是:在运行session_start之前,在程序中加上如下一句(以php语言为例),大致是向浏览器声明一下安全级别,这样iframe子页面在创建session时就不会有问题了: header('P3P: CP=”ALL ADM DEV PSAi COM OUR OTRo STP IND ONL”‘); 另外,我还了解到:如果二级域名中包含了下划线,如:your_domain.yourhost.com,在建立和传递session时也可能会出现问题。 一点感想: 1)时隔多年,浏览器兼容性问题仍然没有得到彻底解决,IE浏览器仍然是那么让开发者感到痛苦和折磨。 2)发布应用前,一定要经过严密的浏览器兼容性测试,否则就有可能损失应用的第一批用户。 其他参考文章: 解决iframe中jsessionid无法传递导致session丢失的问题 http://618119.com/archives/2007/12/19/48.html 在实现 ISMP2.1.1 接口的适合需要用到sso,而ISMP里定义的接口是需要在iframe等嵌入页面中调用sso接口,在实际开发中发现session无法正常传递。 重现问题的场景是: 1.先访问a站点:http://192.168.18.2/test.jsp test.jsp的代码为: session--www.jbxue.com sso .jsp里读取传递的ssoinfo,反向调用ISMP认证接口, 生成session,然后放入指定的属性值, session .setAttribute(“ssoUser”,”lizongbo”); 页面再重定向到 http://192.168.18.3/iframe.jsp response.sendRedirect(“/iframe.jsp”); iframe.jsp中读取session中ssoUser的属性值,会发现无法读取。 2.如果先访问了 192.168.18.3的页面,再访问192.168.18.2的页面,此时的iframe嵌入是可以传递已生成好的jsessionid Cookie. 因此解决的办法有: a.在url中加上jsessionid. 例如重定向到 response.sendRedirect(“/iframe.jsp;jsessionid =lizongbo”); 而这种情况下,如果iframe.jsp页面内的其它连接的url没有加上jsessionid, 也无法继续传递session,不过通过在客户端的js来为每个超连接的href属性重写加上jsessionid. b.sso.jsp里设置P3P头信息 例如 P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR” 或 P3P:CP=”CAO PSA OUR” java代码为: response.addHeader(“P3P”,”/”CAO PSA OUR/”");
2023年08月07日
21 阅读
0 评论
0 点赞
2023-08-07
PHP程序员的40点陋习
PHP程序员的40点陋习1、不写注释2、不使用可以提高生产效率的IDE工具3、不使用版本控制4、不按照编程规范写代码5、不使用统一的方法6、编码前不去思考和计划7、在执行sql前不执行编码和安全检测8、不使用测试驱动开发9、编码时不打开自动报错(error_reporting)10、不使用一种好的调试工具11、不重构你的代码(refactor)12、不采用MVC这样的分层结构13、不知道以下等等概念:KISS,DRY,MVC,OOP,REST14、在函数或者类里直接用print或者echo输出东西而不是返回(return)15、不使用也不去了解单元测试16、返回HTMl而不是data,strings,objects等类型17、糟糕的代码和配置参数(hard code messages and configuration parameters)18、不优化sql查询19、不使用__autoload20、不支持自动错误操作(应该是智能纠错)21、使用$_GET替代$_POST去进行危险的参数传递(记得这40条都是错误的东西)22、不知道怎样使用正则表达式23、从未听说过sql注入和跨站脚本(安全方面,应该了解下这两个东西的英文:sql injection,cross-site scripting)24、不支持简单配置,传递参数给类的构造函数,set/get方法,定义常量25、不能理解OOP的优缺点26、无论要做的东西有多小,都使用OOP27、认为做可复用的软件就是OOP28、不使用缺省值(don't choose intelligent defaults)29、不使用单一配置文件30、不想让别人看到代码,却使用.inc替换掉.php31、不使用数据库抽象层(持久层)32、开发时不DRY(Dont repeat yourself). (就是总开发重复的东西)33、不开发可以重复使用的类或者方法34、不使用抽象类或者接口类,继承,多态,封装.35、不使用已有的设计模式优化你的程序.36、不允许使用者定义基础目录(这点好象PHP不太适合,毕竟不是基于操作系统的开发)37、错误的使用命名空间,使用大家都普遍使用的单词作为前缀.(这样以后别人使用会造成冲突.,例如自己定义一个function 叫 array_push())38、使用数据库时不使用表前缀(这个很重要...)39、不使用或者使用一个陌生的模板引擎(方便团队开发,大家要使用常见的模板)40、不去看PHP的框架(大多数框架中都包含优秀的代码和先进的概念.值得我们学习)
2023年08月07日
15 阅读
0 评论
0 点赞
2023-08-07
快速开发一个PHP扩展
快速开发一个PHP扩展快速开发一个PHP扩展作者:heiyeluren时间:2008-12-5博客:http://blog.csdn.net/heiyeshuwu本文通过非常快速的方式讲解了如何制作一个PHP 5.2 环境的扩展(PHP Extension),希望能够在图文的方式下让想快速学习的朋友了解一下制作过程。需求:比如开发一个叫做 heiyeluren 的扩展,扩展里就一个函数 heiyeluren_test(),输入一个字符串,函数返回:Your input string: xxxxx。要求:了解C/C++编程,熟悉PHP编程环境:下载一份php对应版本的源码,我这里是 php-5.2.6,先正常安装php,假设我们的php安装在 /usr/local/php 目录,源码在 /root/soft/php/php-5.2.6/,现在开始!步骤一:生成扩展框架cd /root/soft/php/php-5.2.6/ext./ext_skel --extname=heiyelurencd /root/soft/php/php-5.2.6/ext/heiyelurenvi config.m4打开文件后去掉 dnl ,获得下面的信息:PHP_ARG_ENABLE(heiyeluren, whether to enable heiyeluren support,[ --enable-heiyeluren Enable heiyeluren support])保存退出.(图01)第二步:编写代码vi php_heiyeluren.h找到:PHP_FUNCTION(confirm_heiyeluren_compiled); ,新增一行:PHP_FUNCTION(heiyeluren_test);保存退出。(图02)vi heiyeluren.c数组里增加我们的函数,找到 zend_function_entry heiyeluren_functions[],增加:PHP_FE(heiyeluren, NULL)(图03)再到 heiyeluren.c 文件最后面增加如下代码:PHP_FUNCTION(heiyeluren_test){char *arg = NULL;int arg_len, len;char *strg;if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {return;}len = spprintf(&strg, 0, "Your input string: %s/n", arg);RETURN_STRINGL(strg, len, 0);}保存退出。(图04)第三步:编译安装cd /root/soft/php/php-5.2.6/ext/heiyeluren/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmakemake testmake install现在看看是不是有个 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/heiyeluren.so编辑php.ini,把扩展加入进去:vi /usr/local/php/lib/php.ini在[PHP]模块下增加:extension = heiyeluren.so保存退出。(图05)注意:如果你不存在扩展文件目录,或者安装报错,那么可以自行建立这个目录,然后把扩展拷贝到目录下,然后记得把 php.ini 文件中的 extension_dir 修改为该目录:extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"(图06)第四步:检查安装结果现在看看模块加载了没有:/usr/local/php/bin/php -m,应该会打印出:[PHP Modules]...heiyeluren...[Zend Modules]然后重启apache,输出 phpinfo() ,应该能够看到:heiyelurenheiyeluren support enabled(图07)看看函数是否存在并且调用,在web目录下建立:heiyeluren.php<?phpecho "";print_r(get_loaded_extensions());print_r(get_extension_funcs('heiyeluren'));echo heiyeluren_test('My first php extension');echo "";?>访问apache,应该能够看到:Array(...[33] => heiyeluren)Array([0] => confirm_heiyeluren_compiled[1] => heiyeluren_test)Your input string: heiyeluren(图08)扩展制作成功!
2023年08月07日
13 阅读
0 评论
0 点赞
2023-08-07
php curl 突破防盗链
php curl 突破防盗链<?php $img=$_GET['img']; function fetch_urlpage_contents($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_TIMEOUT, 1000); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 1000); curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:110.80.7.42', 'CLIENT-IP:110.80.7.42')); //构造IP curl_setopt($ch, CURLOPT_REFERER, "http://www.baidu.com/"); //构造来路 //curl_setopt($ch, CURLOPT_HEADER, 1); $file_contents = curl_exec($ch); $imgurl=str_replace("http://","",$url); $imgurl=str_replace("/","-",$imgurl); $fp = fopen('imgs/'.$imgurl, 'w'); fwrite($fp,$file_contents); fclose($fp); header("Location:imgs/$imgurl"); curl_close($ch); return $file_contents; } $urls='http://img1.xxxxxx.com/'.$img; $haha=fetch_urlpage_contents($urls); //echo $haha;
2023年08月07日
32 阅读
0 评论
0 点赞
2023-08-07
PHP获取网页内容的几种方法
PHP获取网页内容的几种方法方法1: 用file_get_contents 以get方式获取内容<?php$url='http://www.domain.com/?para=123';$html = file_get_contents($url);echo $html;?>方法2:用file_get_contents函数,以post方式获取url<?php$url = 'http://www.domain.com/test.php?id=123';$data = array ('foo' => 'bar');$data = http_build_query($data);$opts = array ('http' => array ('method' => 'POST','header'=> "Content-type: application/x-www-form-urlencoded\r\n" ."Content-Length: " . strlen($data) . "\r\n",'content' => $data));$ctx = stream_context_create($opts);$html = @file_get_contents($url,'',$ctx);如果需要再传递cookie数据,则把'header'=> "Content-type: application/x-www-form-urlencoded\r\n" ."Content-Length: " . strlen($data) . "\r\n",修改为'header'=> "Content-type: application/x-www-form-urlencoded\r\n" ."Content-Length: " . strlen($data) . "\r\n"."cookie:cookie1=c1;cookie2=c2\r\n" ;即可方法3: 用fopen打开url, 以get方式获取内容<?php$fp = fopen($url, 'r');$header = stream_get_meta_data($fp);//获取报头信息while(!feof($fp)) {$result .= fgets($fp, 1024);}echo "url header: {$header} ":echo "url body: $result";fclose($fp);?>方法4: 用fopen打开url, 以post方式获取内容<?php$data = array ('foo2' => 'bar2','foo3'=>'bar3');$data = http_build_query($data);$opts = array ('http' => array ('method' => 'POST','header'=> "Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n" ."Content-Length: " . strlen($data) . "\r\n",'content' => $data));$context = stream_context_create($opts);$html = fopen('http://www.test.com/zzzz.php?id=i3&id2=i4','rb' ,false, $context);$w=fread($html,1024);echo $w;?>方法5:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body<?phpfunction get_url ($url,$cookie=false){$url = parse_url($url);$query = $url[path]."?".$url[query];echo "Query:".$query;$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);if (!$fp) {return false;} else {$request = "GET $query HTTP/1.1\r\n";$request .= "Host: $url[host]\r\n";$request .= "Connection: Close\r\n";if($cookie) $request.="Cookie: $cookie\n";$request.="\r\n";fwrite($fp,$request);while(!@feof($fp)) {$result .= @fgets($fp, 1024);}fclose($fp);return $result;}}//获取url的html部分,去掉headerfunction GetUrlHTML($url,$cookie=false){$rowdata = get_url($url,$cookie);if($rowdata){$body= stristr($rowdata,"\r\n\r\n");$body=substr($body,4,strlen($body));return $body;}return false;}?>方法6:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body<?phpfunction HTTP_Post($URL,$data,$cookie, $referrer=""){// parsing the given URL$URL_Info=parse_url($URL);// Building referrerif($referrer=="") // if not given use this script as referrer$referrer="111";// making string from $dataforeach($data as $key=>$value)$values[]="$key=".urlencode($value);$data_string=implode("&",$values);// Find out which port is needed - if not given use standard (=80)if(!isset($URL_Info["port"]))$URL_Info["port"]=80;// building POST-request:$request.="POST ".$URL_Info["path"]." HTTP/1.1\n";$request.="Host: ".$URL_Info["host"]."\n";$request.="Referer: $referer\n";$request.="Content-type: application/x-www-form-urlencoded\n";$request.="Content-length: ".strlen($data_string)."\n";$request.="Connection: close\n";$request.="Cookie: $cookie\n";$request.="\n";$request.=$data_string."\n";$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);fputs($fp, $request);while(!feof($fp)) {$result .= fgets($fp, 1024);}fclose($fp);return $result;}?>方法7:使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展<?php$ch = curl_init();$timeout = 5;curl_setopt ($ch, CURLOPT_URL, 'http://www.domain.com/');curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$file_contents = curl_exec($ch);curl_close($ch);echo $file_contents;?>
2023年08月07日
10 阅读
0 评论
0 点赞
1
...
93
94
95
...
112