回 帖 发 新 帖 刷新版面

主题:VC++6.0客户端如何实现与WebService持久会话?

我现在VC6.0编写的客户端通过SOAP调用服务器提供的WebService来加载服务器中的数据记录到客户端报表显示。现在客户端需要调用WebService对数据记录进行增删改操作,这个涉及到用户权限问题。 
(1)一种最简单的想法就是为每个需要权限验证的WebMethod添加UserName和PassWord参数,这样每次调用WebService都要传账户密码参数。很明显问题就是账户密码都内化在代码里,一旦编译后,只能以传递账户密码。这个显然问题很大。 
另外,安全性如何? 
(2)为WebMethod添加SoapHeader,这样VC++6.0通过SOAP调用每一个涉及到权限检查的WebService时都得填充SoapHeader。另外,安全性? 
(3) 
我现在想在服务端设置一个全局变量bLogin,然后写一个登陆的WebService-bool Login(UserName,PassWord);return bLogin;以后的每个WebMethod中都要进行bLogin状态判断。 
在客户端也设置一个全局变量bLogin初始化为false,调用涉及到权限检查的WebMethod时,先在客户端检查bLogin==true?,若bLogin==false将弹出登录对话框,然后调用Login WebService,获取返回值赋给bLogin;若bLogin==true则直接调用WebService,这样保证了客户端增删改时先登录。 
这个貌似两边都要检查?然后直接写一个登录的WebService,安全吗? 
(4)能不能实现类似登陆网站后的持久会话?session?cookie? 
我初学SOAP,WebService,对session、cookie都不太懂,这几天都在找资料学习,还是没能想出来,希望大家给点建议或提示,小弟先谢过了~

回复列表 (共2个回复)

沙发

你的项目我没做过类似的,你可以google或者在www.cppblog.com中找到答案。

板凳

还是选择(2)和(3),
方案(3) 在服务端只写一个登陆的WebService:bool Login(UserName,PassWord);return bLogin;
在客户端设置一个全局变量bLogin,状态由客户端的这个全局变量来维持。这个实现起来比较简单一点。
(2)为每个WebMethod添加SoapHeader,调用每一个涉及到权限检查的WebService时都得填充SoapHeader。这个客户端对状态的维持较(3)麻烦点。
不过在网上看,现在WebService的验证基本都是使用SOapHeader。
但我觉得,(2)和(3)在传递参数的安全性上差不多,而且如果使用SoapHeader的话,会多次传递,暴露的几率会更大一些。当然对于传递的账户参数都可以进行加密,这个是后续话题。
至于(4),在API中有InternetSetCookie/InternetGetCookie(Wininet.h),在MFC中也有CInternetSession(CInternetSession member functions SetCookie, GetCookie, and GetCookieLength provide the means to manage a Win32 cookie database, through which servers and scripts maintain state information about the client workstation.)可以对本地Cookie进行操作,具体目前还没实施过。

我来回复

您尚未登录,请登录后再回复。点此登录或注册