当前位置:  编程技术>php
本页文章导读:
    ▪php模拟http身份认证的代码一例      代码如下: <? // 检查变量 $PHP_AUTH_USER 和$PHP_AUTH_PW 的值 if ((!isset()($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) { // 空值:发送产生显示文本框的数据头部 header('WWW-Authenticate: Basic realm=".........
    ▪php session跨域跨服务器的解决方法分享      除了asp.net外,所有session的保留都必须借助session id。 Session的保存位置主要有:共享文件、数据库、memcache。 Session id的传递主要有四种方法: 1、通过cookie。 2、设置php.ini中的session.use_trans_s.........
    ▪php url重定向(页面跳转)的代码      代码如下: <?php /** * 重定向浏览器到指定的 URL * www. * @param string $url 要重定向的 url * @param int $delay 等待多少秒以后跳转 * @param bool $js 指示是否返回用于跳转的 Java.........

[1]php模拟http身份认证的代码一例
    来源: 互联网  发布时间: 2013-12-24

代码如下:

<?   
// 检查变量 $PHP_AUTH_USER 和$PHP_AUTH_PW 的值   
if ((!isset()($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) {   
// 空值:发送产生显示文本框的数据头部   
    header('WWW-Authenticate: Basic realm="My Private Stuff"');   
    header('HTTP/1.0 401 Unauthorized');   
    echo 'Authorization Required.';   
    exit;    
}    
else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){    
    // 变量值存在,检查其是否正确    
    if (($PHP_AUTH_USER != "username") || ($PHP_AUTH_PW != "password")) {   
    // 用户名输入错误或密码输入错误,发送产生显示文本框的数据头部   
    header('WWW-Authenticate: Basic realm="My Private Stuff"');   
    header('HTTP/1.0 401 Unauthorized');   
    echo 'Authorization Required.';   
    exit;  //by http://www.
}    
else if(($PHP_AUTH_USER == "username") || ($PHP_AUTH_PW == "password")) {   
 // 用户名及密码都正确,输出成功信息    
 echo "<P>You're authorized!</p>";   
}   
}    
?>

附,php实现基本的身份认证的说明。

可以通过结合header()函数和$PHP_AUTH_USER、$PHP_AUTH_PW全局变量的方法来创建一个基本的认证机制。通常基于服务器的认证请求/响应过程如下:
1. 用户向一台Web服务器请求一个文件。如果文件在一个受到保护的区域以内,服务器就在响应数据的头部内加上401(非法用户)字符串作为回应。
2.浏览器看见该响应之后弹出用户名/口令对话框。
3.用户在对话框中输入用户名和口令,然后单击“OK”把这些信息送回到服务器进行认证。
4. 如用户名及口令有效,被保护的文件将会显示给用户。该确认将在经证实的用户在保护区域内的时间里持续有效。 

一个简单的PHP脚本可以通过发送适当的HTTP头以在客户机屏幕自动显示用户名/口令对话框以模拟HTTP认证请求/响应系统。
PHP将用户输入对话框的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW变量中。

通过使用这些变量,可以把不符合用户名/口令检验的列表存放到某个文本文件、数据库或者你希望的任何地方。

注意:
$PHP_AUTH_USER、$PHP_AUTH_PW和$PHP_AUTH_TYPE全局变量仅当PHP被当作一个模块安装时才是有效的。
如正使用PHP的CGI版本,则将仅限于使用基于htaccess认证或基于数据库的认证方式,并通过HTML表单让用户输入用户名和口令,然后再让PHP完成有效性的检查。

以上的示例,显示对两个硬件编码值的确认检查,不论用户名和口令存放在何处,这在理论上完全相同。

希望以上的演示代码,对大家理解php模拟http身份认证有一定的帮助。


    
[2]php session跨域跨服务器的解决方法分享
    来源: 互联网  发布时间: 2013-12-24

除了asp.net外,所有session的保留都必须借助session id。
Session的保存位置主要有:共享文件、数据库、memcache。

Session id的传递主要有四种方法:
1、通过cookie。
2、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
3、手动通过url或隐藏表单传值。
4、用文件或数据库方式传递,在通过其他key对应取值。
以上的2和3其实使用的是同样的方法,只是途径不一样。
从以上的分析可得看出,通过cookie传递session id,将session存储于memcache服务器中是为一个比较合理的选择。
当出现跨域的情况是,可以使用p3p跨域设置cookie。
而当客户端禁用cookie的情况下,可以设置php.ini,通过url自动传递session id。

以通行证为例,探讨其逻辑实现过程(视需求而定,而如果要保证接口的一致性,同时对其他服务器屏蔽session服务器,所有的登陆和获取session信息可以都通过登录服务器进行中转,不过这自然会有时间的延误和登录服务器宕机引起的全站瘫痪风险):
包含服务和应用:登陆服务器,保存session的memcache服务器,应用服务器,公钥,密钥
1)、对于可信任服务器:
可以通过登陆公钥加密用户提交的用户名、密码等信息,,直接从客户端提交登录服务器,或通过rpc调用提交登陆服务器,进行用户登陆。

登录服务器将获取登陆用户的相关信息,以session的方式存于session服务器,并以p3p方式在客户端cookie中设置所有域名下的session id,session id以session加密公钥方式进行加密。如果使用的是rpc调用,则由本台服务器设置客户端cookie。如果没有将所有的域名都进行设置,可能出现的情况是,没有设置的域名下的模块需要单独重新登录。(cookie不可用的情况将全部使用url传递使用session加密公钥加密过的session id,也不存在跨域问题。)

登录之后,客户端通过session解密公钥,解密通过cookie或url传递的session id,并通过此id从session服务器获取对应session信息,在各模块间漫游。(也可以统一通过登录服务器读取session信息。Session服务器可以使用多机定时备份,防止宕机或改服务重启引起的用户登陆session丢失问题。)

2)、对于非可信任的合作用户:
可以通过api接口传递用户名,密码或/和验证码等相关参数。验证码可以是双方确认的某一key,或用户资料等信息。
登录服务器验证确认来源之后,产生一个一次性使用的密钥,返回调用端。
密钥由请求端和登录服务器共同保存和维持,其他相关需要保存和维持的信息由请求端完成。
后面实现同(1)与(1)的主要不同在于:
1).必须先确认请求身份;
2).使用密钥而不使用公钥;
3).读取session必须通过登录服务器。

希望以上的讲述,对大家有所启发,在解决session跨域跨服务器的问题上能带来点滴的帮助。

您可能感兴趣的文章:
PHP防止跨域提交表单的解决方法
php使用P3P实现跨域的方法分享
http与https跨域共享session的解决方法
php借助P3P完成COOKIE跨域操作的方法分享
php中json的跨域实例分析
php 跨域、跨子域,跨服务器读取session的方法介绍
php的json格式和js跨域调用的代码
php JSON 跨域调用数据的例子


    
[3]php url重定向(页面跳转)的代码
    来源: 互联网  发布时间: 2013-12-24

代码如下:

<?php   
 /**   
  * 重定向浏览器到指定的 URL   
  * www.
  * @param string $url 要重定向的 url   
  * @param int $delay 等待多少秒以后跳转   
  * @param bool $js 指示是否返回用于跳转的 JavaScript 代码   
  * @param bool $jsWrapped 指示返回 JavaScript 代码时是否使用 <mce:script type="text/javascript"><!-- 
  标签进行包装   
  * @param bool $return 指示是否返回生成的 JavaScript 代码   
  */  
 function redirect($url, $delay = 0, $js = false, $jsWrapped = true, $return = false)   
 {   
  $delay = (int)$delay;   
  if (!$js) {   
   if (headers_sent() || $delay > 0) {   
    echo <<<EOT   
  <html>   
  <head>   
  <meta http-equiv="refresh" content="{$delay};URL={$url}" />   
  </head>   
  </html>   
 EOT;   
    exit;   
   } else {   
    header("Location: {$url}");   
    exit;   
   }   
  }   
   
  $out = '';   
  if ($jsWrapped) {   
   $out .= '<script language="JavaScript" type="text/javascript">';   
  }   
  $url = rawurlencode($url);   
  if ($delay > 0) {   
   $out .= "window.setTimeOut(function () { document.location='{$url}'; }, {$delay});";   
  } else {   
   $out .= "document.location='{$url}';";   
  }   
  if ($jsWrapped) {   
   $out .= '  
 // --></mce:script>';   
  }   
   
  if ($return) {   
   return $out;   
  }   
   
  echo $out;   
  exit;   
 }    
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3