`

用 PHPRPC 实现 Ajax 安全登录

阅读更多
该文首发于CoolCode.CN

昨天我举了个 用 PHPRPC 实现 Ajax 级联下拉菜单 的例子,那个例子中我们重点要演示的是用 PHPRPC 实现 Ajax 效果是多么的简单。今天我们这个例子主要演示用 PHPRPC 内置的安全加密机制来实现安全登录是多么简单。当然它同样可以用于密码设置、其它关键保密数据的传输等领域。

这个例子比昨天的例子还要简单,先来看服务器端:
PHP 代码:
<!-- php buffer start --><?php
functionlogin($username,$password){
if((
$username=="root")&&($password=="admin")){
$_SESSION['user']="root";
return
true;
}
$_SESSION['user']=null;
return
false;
}

require_once(
"phprpc_server.php");
new
phprpc_server(array('login'));
?>
<!-- php buffer end -->

这段代码太简单了,我不需要多说什么大家也能够看明白。不过大家会发现,在 login 函数中我用了 $_SESSION 变量,但是并没有在什么位置上写 session_start(),原因在于建立加密连接时,已经自动调用了 session_start(),因此不需要再单独写 session_start() 了。为了验证它是否生效,我们在后面的另一个页面中(admin.php),将判断这里设置的 $_SESSION 变量,并根据它来报告登录成功或者没成功跳回到登录页面。

那再来看看客户端,客户端我们将 JavaScript 跟 HTML 分离了,先来看看 html 页面。

代码:
<html> <head> <script type="text/javascript" src="phprpc_client.js"></script> <script type="text/javascript" src="login.js"></script> </head> <body> <div align="center"> 帐号:<input type="text" id="username" /> 密码:<input type="password" id="password" /> <input type="button" value="登录" id="loginbtn" /> </div> </body> </html>

这个页面很简单,只是设置好了表单输入框和按钮,所有的处理都是在 login.js 中完成的。不过需要注意的是这里的 phprpc_client.js 是 full 压缩版本,因为我们需要用到它的加密传输功能。我们来看看 login.js 是怎么写的。

代码:
// 创建 phprpc 客户端对象 rpc phprpc_client.create('rpc'); // 初始化带有加密连接的 rpc 服务,第二个参数表示是否创建加密连接 rpc.use_service('rpc.php', true); // 登录函数 function login() { // 如果加密连接已经初始化完毕,则验证用户名密码 if (rpc.ready) { // 获取用户输入的用户名和密码 var username = document.getElementById('username').value; var password = document.getElementById('password').value; // 设置远程过程调用为单向加密, // 即传递的参数是加密的,但返回结果不加密 rpc.encrypt = 1; // 调用远程过程验证用户名密码是否正确,并设置回调函数。 rpc.login(username, password, function (result) { // 如果返回结果正确,则转到登录后的页面 if (result === true) { window.location.replace('admin.php'); } // 否则提示用户名密码不正确 else { alert('用户名密码不正确!'); } }); } // 如果连接尚未初始化完毕,则等待 100 毫秒后重试。 else { window.setTimeout('login();', 100); } } window.onload = function () { document.getElementById('loginbtn').onclick = login; }

大家会发现除了在调用 use_service 时,设置了第二个参数为 true 外,还在调用服务器端的 login 函数前,设置了 rpc.encrypt 的值为 1,这里 1 表示单向加密传输,单向加密传输是指调用的参数会以加密的方式传给服务器,但是返回的结果不加密(如果参数是引用参数的话,参数返回时也是加密的)。如果 rpc.encrypt 的值为 0,则表示不加密;如果是 2,则表示双向加密。

这里因为只有用户名和密码是敏感数据,需要保证它在传递给服务器时不被截获(即使截获也是加密的内容,无法破解),但返回的结果成功还是不成功并不是什么需要保密的数据,所以可以不加密。因此这里选择了单向加密传输。

大家也不必担心密钥是否会被截获,因为密钥是通过密钥交换算法,在服务器端和客户端(浏览器端)随机同步生成的,但没有经过网络传输,在网络上传输的是生成同步密钥的相关信息,但是只获取到这些信息是不足以算出密钥的,因此可以保证密钥的安全性。而加密算法本身也是一个强加密算法,密钥长度是 128 位,在没有密钥的情况下采用穷举法也是无法破解的。

大家会发现登录成功后,我们转向了 admin.php 页面,下面是这个页面的一个简单的例子:
PHP 代码:
<!-- php buffer start --><?php
session_start
();
if(
$_SESSION['user']=='root'){
echo
"登录成功!";
}
else{
header("Location:index.html");
}
?>
<!-- php buffer end -->

这里需要自己 sestion_start() 一下了,之后就可以验证 $_SESSION['user'] 是否设置了。

演示程序
实例下载

通过 PHPRPC,你不再需要为 Ajax 程序中数据的安全性而头痛,也不必为会话支持而苦恼,这一切 PHPRPC 都已经帮你自动完成了,你只需要关注具体的事务就可以了。用 PHPRPC 来做 Ajax 安全编程,就是这么简单!
分享到:
评论

相关推荐

    使用PHPRPC实现Ajax安全登录第1/2页

    PHPRPC 与其它 ajax 框架不同,PHPRPC 遵循的是“只做一件事,并把它做好”的原则。它只负责数据传输,并且将... 下 面我们举一个最简单的例子(甚至可以算是无聊的例子 )来说明如何使用 PHPRPC 3.0 编写 ajax 应用

    Ajax基础教程(扫描版)

    本书重点介绍ajax及相关的工具和技术,主要内容包括xmlhttprequest对象及其属性和方法、发送请求和处理响应、构建完备的ajax开发工具、使用jsunit测试javascript、分析javascript调试工具和技术,以及ajax开发模式和...

    PHP & Ajax

    - Ajax通过使用XMLHttpRequest对象实现了客户端与服务器之间的异步通信,使得客户端可以在后台与服务器进行数据交换,从而实现局部页面更新。 - **过程示例**: - 客户端(浏览器)发起一个HTTP请求到服务器。 -...

    AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程

    这意味着开发者可以利用AMFPHP,使PHP应用程序能够轻松地与Flash/Flex应用或者使用JavaScript、JSON、Ajax、XML和XML-RPC构建的应用程序进行数据交换。 AMFPHP的核心工作原理如下:客户端(使用Flash/Flex等技术)...

    php网络开发完全手册

    7.5.7 用正则表达式进行字符串分割 7.5.7 ——preg_split 115 7.6 字符操作的注意事项 117 7.7 小结 118 第8章 数组操作与数据结构算法 119 8.1 一维数组与多维数组 119 8.1.1 一维数组简介 119 8.1.2 多维数组简介 ...

    PHP 5 In Practice

    PHP是一种广泛使用的服务器端脚本语言,尤其适用于Web开发,能够与HTML紧密集成,实现动态网页内容。 在PHP 5中,最重要的更新之一是对象模型的改进。书中会详细讲解面向对象编程(OOP)的概念,包括类、对象、继承...

    PHP高级编程

    PHP常与HTML、CSS、JavaScript等前端技术配合使用,理解AJAX、jQuery、Vue.js或React等前端框架,可以实现动态交互的Web应用。 通过学习和实践上述PHP高级编程知识点,开发者可以构建出高效、安全且易于维护的Web...

    java开源包3

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    php中文参考手册 超级全面

    PHP可以与JavaScript、CSS、HTML等前端技术无缝配合,通过AJAX实现页面无刷新更新,通过PHP的服务器端处理减轻前端负担,提升用户体验。 九、PHP框架与开发工具 为了提高开发效率和代码质量,PHP社区开发了许多...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    PHP敏捷开发CodeIgniter框架

    CodeIgniter的类库如FTP、Email和XML-RPC,方便开发者实现与外部服务的通信。 8. **测试与性能分析**:CodeIgniter提供了单元测试、基准测试和分析器,帮助开发者确保代码质量,同时找出性能瓶颈。 9. **辅助函数*...

    dwr 实例(MyEclipse开发,包括dwr所用jar包)

    - **Caucho Quercus**:DWR内部使用了Caucho的Quercus,这是一个完全用Java实现的PHP解释器,用于处理PHP应用与DWR的集成。 2. **DWR配置** - **添加依赖**:在项目中引入DWR所需的jar包,这些jar包包含了DWR的...

    技术经理决策参考-Java和PHP的协同开发方案

    最后,Quercus是一种独特的解决方案,它是一个100%用Java实现的PHP运行时环境。Quercus允许PHP应用直接与Java库交互,包括JMS、EJB、SOA框架、Hibernate和Spring等。通过将PHP代码解释/编译为Java,Quercus实现了PHP...

    轻松使用rabbitmq.rar

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展...

    用drupal+php+jquery+mysql建的电子商务网站

    在电子商务网站中,jQuery可以用来增强用户体验,比如通过AJAX技术实现无刷新页面加载,提升页面导航的流畅性;或者通过动态效果展示产品,提高用户对商品的兴趣。jQuery的易用性和兼容性使其成为Web开发中的首选...

    java开源包8

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包1

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包11

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

Global site tag (gtag.js) - Google Analytics