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

seai 2010-12-15 03:01:44
查了一些资料,好像都是每一次调用webservice方法时,都需要附带客户验证信息,能否像普通的网页浏览那样,登录后,在会话期内任意访问都不需要再次提供客户验证信息呢?
...全文
595 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
不懂必须要问 2013-05-13
  • 打赏
  • 举报
回复
哎,PHP就是没有完善的东西呀。
MMDD0827 2011-06-15
  • 打赏
  • 举报
回复
直接不启用cookies啦、 session啦 等类似的机制不行吗 ?
maping1018 2011-05-23
  • 打赏
  • 举报
回复
不用每次都传密码的,这样有安全隐患,可以用临时的token来解决
seai 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 deyygywxf 的回复:]

在session中保留id
[/Quote]

还是不够清楚,和我说的通过“curl代理将验证传递的方式”有什么不同吗?
deyygywxf 2011-03-09
  • 打赏
  • 举报
回复
在session中保留id
seai 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 daly2008 的回复:]

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


但是session机制怎样应用到webservice中呢?
daly2008 2011-03-02
  • 打赏
  • 举报
回复
lz说的完全可以采用session机制来实现,当你发送请求时,在服务器端建立session,服务器处理完用户请求后,将sid发送给客户端,客户端可以记录在cookie里,只要sid不过期,就不用重复发送验证信息了。session就是提供这种机制的。
seai 2011-03-01
  • 打赏
  • 举报
回复
今天回头来看这个问题,似乎可以用curl发送cookie的方式解决。

myservice.php

myproxy.php

myclient.php

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

各位的意见如何?
ihefe 2010-12-20
  • 打赏
  • 举报
回复
呃也就是你说的http basic验证
ihefe 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 seai 的回复:]

引用 7 楼 ihefe 的回复:

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

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



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

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

去掉
seai 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ihefe 的回复:]

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

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


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

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

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


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 "<p>Welcome: {$_SERVER['PHP_AUTH_USER']}<br />";
// echo "Old: {$_REQUEST['OldAuth']}";
// echo "<form action='' METHOD='post'>\n";
// echo "<input type='hidden' name='SeenBefore' value='1' />\n";
// echo "<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}' />\n";
// echo "<input type='submit' value='Re authenticate' />\n";
// echo "</form></p>\n";
echo date('h:i:s') . "<br />";

//暂停 10 秒
sleep(10);

//重新开始
echo date('h:i:s');
header('WWW-Authenticate: Basic realm=""');
header('HTTP/1.0 401 Unauthorized');

}

//可以直接使用试试看是不是你想要的结果
ihefe 2010-12-20
  • 打赏
  • 举报
回复
你说的是浏览器验证
用户:$_SERVER['PHP_AUTH_USER']
密码:$_SERVER['PHP_AUTH_PW']

参考:http://php.net/manual/en/features.http-auth.php
seai 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cunningboy 的回复:]

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

思路还是不够完整
CunningBoy 2010-12-15
  • 打赏
  • 举报
回复
你查查看cookie,HTTP header中有没有id之类的值,每次请求的时候都要将这个值发给服务器
seai 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 heyc1998 的回复:]

那是提供webservice方决定的!
[/Quote]

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

我的问题在于curl请求webservice的话,似乎就必须每次都提供验证信息来完成调用。有没有一次验证的解决方案呢?
在-云端 2010-12-15
  • 打赏
  • 举报
回复
那是提供webservice方决定的!
CunningBoy 2010-12-15
  • 打赏
  • 举报
回复
在session中保留id

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧