欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php写webservice,验证问题如何解决?

程序员文章站 2022-06-07 19:13:10
...
查了一些资料,好像都是每一次调用webservice方法时,都需要附带客户验证信息,能否像普通的网页浏览那样,登录后,在会话期内任意访问都不需要再次提供客户验证信息呢?


回复讨论(解决方案)

在session中保留id

那是提供webservice方决定的!

那是提供webservice方决定的!

不单是提供webservice方决定,还有访问方式,比如使用basic验证,用浏览器访问的话,会提示一个验证框,如果验证通过,同一进程再次访问就不会提示框了。

我的问题在于curl请求webservice的话,似乎就必须每次都提供验证信息来完成调用。有没有一次验证的解决方案呢?

你查查看cookie,HTTP header中有没有id之类的值,每次请求的时候都要将这个值发给服务器

你查查看cookie,HTTP header中有没有id之类的值,每次请求的时候都要将这个值发给服务器

思路还是不够完整

你说的是浏览器验证
用户:$_SERVER['PHP_AUTH_USER']
密码:$_SERVER['PHP_AUTH_PW']

参考:http://php.net/manual/en/features.http-auth.php

function authenticate() {    header('WWW-Authenticate: Basic realm=""');    header('HTTP/1.0 401 Unauthorized');    echo "You must enter a valid login ID and password to access this resource\n";    exit;}if (addslashes($_SERVER['PHP_AUTH_USER'])!= 'adminname' || addslashes($_SERVER['PHP_AUTH_PW'])!= 'adminadmin') {	header('WWW-Authenticate: Basic realm=""');	header('HTTP/1.0 401 Unauthorized');	echo "对不起,无权进入! user=".$_SERVER['PHP_AUTH_USER']."password=".$_SERVER['PHP_AUTH_PW'];  //后面这半句我是为了测试而加上去的;}else{	echo "进入! user=".$_SERVER['PHP_AUTH_USER']."password=".$_SERVER['PHP_AUTH_PW'];  //后面这半句我是为了测试而加上去的;	echo "

Welcome: {$_SERVER['PHP_AUTH_USER']}
";// echo "Old: {$_REQUEST['OldAuth']}";// echo "

\n";// echo "\n";// echo "\n";// echo "\n";// echo "
\n"; echo date('h:i:s') . "
"; //暂停 10 秒 sleep(10); //重新开始 echo date('h:i:s'); header('WWW-Authenticate: Basic realm=""'); header('HTTP/1.0 401 Unauthorized'); }//可以直接使用试试看是不是你想要的结果

你说的是浏览器验证
用户:$_SERVER['PHP_AUTH_USER']
密码:$_SERVER['PHP_AUTH_PW']

参考:http://php.net/manual/en/features.http-auth.php


应该不是我要的。我想问的包含两方面的问题:

1、开放的webservice有哪些验证机制?比如我说key是一种,http的basic验证也是一种,还有其他哪些方式呢?

2、想知道有哪些验证机制是为了这个目的:有没有一种验证机制,在php调用webservice时,只需在第一次请求中发送验证信息,以后调用就不需要再次验证了--类似于普通页面浏览的过程,填写一次登陆信息后,只要不超时,访问这个网站的其他任何页面都不需要再登陆。

引用 7 楼 ihefe 的回复:

你说的是浏览器验证
用户:$_SERVER['PHP_AUTH_USER']
密码:$_SERVER['PHP_AUTH_PW']

参考:http://php.net/manual/en/features.http-auth.php



应该不是我要的。我想问的包含两方面的问题:

1、开放的webservice有哪些验证机制?比……
这个就是只验证一次, 你试过我给你的代码吗?把最后
echo date('h:i:s');
header('WWW-Authenticate: Basic realm=""');
header('HTTP/1.0 401 Unauthorized');

去掉

呃也就是你说的http basic验证

今天回头来看这个问题,似乎可以用curl发送cookie的方式解决。

myservice.php

myproxy.php

myclient.php

用户在myclient.php(或者其他地方登陆),通过后可直接访问myproxy.php,在myproxy.php中通过curl的方式连同cookie一起请求myservice.php。

各位的意见如何?

lz说的完全可以采用session机制来实现,当你发送请求时,在服务器端建立session,服务器处理完用户请求后,将sid发送给客户端,客户端可以记录在cookie里,只要sid不过期,就不用重复发送验证信息了。session就是提供这种机制的。

lz说的完全可以采用session机制来实现,当你发送请求时,在服务器端建立session,服务器处理完用户请求后,将sid发送给客户端,客户端可以记录在cookie里,只要sid不过期,就不用重复发送验证信息了。session就是提供这种机制的。


但是session机制怎样应用到webservice中呢?

在session中保留id

在session中保留id

还是不够清楚,和我说的通过“curl代理将验证传递的方式”有什么不同吗?

不用每次都传密码的,这样有安全隐患,可以用临时的token来解决

直接不启用cookies啦、 session啦 等类似的机制不行吗 ?

哎,PHP就是没有完善的东西呀。