retweet

ajax的用户身份验证(以及ajax和soap的区别)

*XmlHTTPRequest组件有这样的行为:* * *

1)和服务器会话时,它直接将用户现有的cookie信息加入到会话的http header中。

2)如果服务器发生了跳转,例如服务器返回如下信息:

那么XmlHTTPRequest的行为将依赖用户浏览器。一般来说XmlHTTPRequest不能得到这个消息头,也不能得到http 302的状态码,而是直接继续访问跳转页面Location: testpost.php如果访问成功,直接返回http状态码200,并读取得到此页面的文本输出。

Ie中没有相关配置,只会进行上述行为。

Opera中有“是否允许自动重定向”设置。如果用户不允许自动重定向则xmlHTTPRequest能接收到302信息,xmlHttpRequest不会继续跳转。

Firefox中有一个选项network.http.redirection-limit(20),这个选项是用户所允许的重定向次数。如果设置成0,那么很遗憾,XmlHTTPRequest接收不到任何信息。

『演示代码』

HTTP/1.1 302 Found

Date: Thu, 01 Dec 2005 02:00:24 GMT

Server: Apache/1.3.33 (Unix) PHP/4.4.0 mod_ssl/2.8.24 OpenSSL/0.9.7e

X-Powered-By: PHP/4.4.0

Location: testpost.php |

所以我们可以得出结论:

1)在dhtml的环境里,ajax的身份验证和用户浏览器是等同的,ajax依赖的XmlHTTPRequest和服务器的会话http header会自动包含浏览器中的cookie.

所以从传统网站过渡到ajax,在用户身份验证上不必花费太大力气。

2)另外,XmlHTTPRequest组件更像浏览器提供给用户的一个组件,而不像一个纯粹的socket组件,它包装了一些行为,例如上面提到的它将用户cookie自动加入http header到请求信息中,再如刚才提到的它自动读取服务器uri发生跳转以后的页面。

结论:在使用ajax做web应用的时候,基本上和传统web程序身份验证方式相同。只是不能使用自动重定向的方法让没有cookie的用户跳转到登录页面。比较好的方案是使用错误处理的方式,当用户还没有登录时向客户端返回一个错误码,客户端js分析错误码进行跳转。

*SOAP的用户身份验证:* * *

我见过的SOAP身份验证有两种,一种是每次请求时,将用户名和密码放到http的header中,这是HTTP标准协议中对于http header的应用,当然,这是明文的,如果需要加密的话,只能使用ssl,而每次请求都使用ssl显然会影响速度。另一种是使用session,例如MS DotNet WebService有它的session机制 。但是如果用php实现这些,恐怕要花费很大精力。

*结论*ajax的服务端更像一个简单的rpc,虽然和soap有些类似,但是实现一个支持ajax的服务端是很简单的,但是要实现soap就复杂的多了。

但是从业务逻辑的观点来看,ajax的服务端可以做到和soap的服务端类似,成为一种专门提供业务逻辑操作的远程调用接口。
--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢

本文地址: http://www.dulao5.com/front-end/2006/02/17/ajax-auth-with-cookie.textile

var x = sajax_init_object();

x.open("GET","testjump.php",true);

function _callback() { if (x.readyState != 4)return;

sajax_debug("

received " 


+ x.responseText

+"\nstatus:"

+x.status+"

");

alert("调用结束");

}

if ("[XMLHttpRequest]"==x.constructor){ x.onload = _callback ;}

else{ x.onreadystatechange = _callback ;}

x.send("");

|