问题描述
现在我们开发一个项目,业务逻辑层全部用WebService,客户端有Flex和Asp.Net,Flex和Asp.Net的所有业务逻辑数据库的访问全部调用WebService中的方法(好象Flex也不能直接对数据库进行访问,所以也只能用WebService),现在就出现问题了,就是WebService中的权限问题了,比如:我在WebService中有一个Login的方法,还有一个ChangePwd修改用户密码的方法,可之,如果我要调用ChangePwd方法前我一定要判断用户是否Login了,所以一般的情况就是在Login方法里面当用户成功登陆后就Sesssion用户ID或者是用Cookie来保存以唯一标识用户,然后我再在ChangePwd方法里面先判断访问的用户是否存在Session或是有Cookie标识,如果有的话我再允许修改修改他自己当前登陆的密码,但是这些当做为WebService方法的提供的时候就出现了问题,我在访问用户成功Login后Session当前用户的ID之后,当用户再去调用ChangePwd方法的时候Session却丢失了,原因是我并不是直接打开IE访问WebService页面,然后在点调用那一个WebService方法,那样我能成功验证。但我现在要是在我的项目中添加WebService引用,引用成功后.net便会自动生成一个App_WebReferences文件夹来保存引用的WebService的WSDL等信息,我们在调用的时候将WebService实例化后就直接调用Login或ChangePwd方法了,但是我是这样调用的话当我成功Login后能Session一个用户ID,但是当我在调用ChangePwd后却不能成功,因为我在ChangePwd是判断了Session是否存在,结果Session不存在了,我明明在成功Login后Session了用户ID但是却在第二次调用ChangePwd的时候不存在了,郁闷…我用Coookie亦如此,也丢失了,测试可知,我打开页面直接访问WebService中调用他的方法能成功,能植入Cookie,但我添加WebService引用到项目在调用Login方法时候根本就没法值入Cookie,没有报错,但是我在网页临时文件夹和Cookie的文件夹内都找不到Cookie,第二次在调用ChangePwd时我在判断身份时候当然也是个Cookie不存在。在网上看了很多Cookie和Session的东西,在WebService中能应用的没几个,有人说要在客户端写个CookieContainer的Cookie容器来保存WebService传回来的一些Cookie那样便不会丢失,但是有一个非常严重的问题就是我的客户端还必须是Flex,如果只是在.Net中调用那当然没事,我在.net中就直接判断Session或Cookie很方便的,也不存在丢失的问题,就根本不需要的在WebService里面去判断权限了,但是我WebService的客户端还必须是Flex,Flex它好象不能做权限处理的,数据库也不能直接访问,所以便要调用WebService,所有我便想把权限处理放在WebService里面,客户端不用管的,就直接调用,我在WebService里面验证,验证通过就执行,验证不通过则不执行,但是当我想当然就这样做的时候,就出现了上述的问题,我真的很急,因为我刚进公司,然后公司里面要赶项目,做一个电子商务的网站,要做一个Asp.net版的和一个Flex版的,所有业务逻辑全调用WebService,而我负责写WebService,一开始就遇到了这个头疼的问题,所以请各位高手帮我想想办法,我自认是菜鸟一个,想不到其他办法,现在又真的很急,所以请大家都帮帮忙,给我出出注意,请原谅我占了主页。补充一下:基本上我可以确认业务逻辑一定要写成WebService,因为我们经理说不止Flex下次我们的OA系统可能也要用WebServce,WebService能通用,所以就只能在WebService中写验证即用Session或Cookie验证了,请大家在这里帮我想想办法解决。谢谢!!!(如果大家愿意帮我忙话要测试的话可以留言问我要测试WebService,我已经把我写的几个WebService挂到了网上)
解决方案
解决方案二:
WebService端只负责验证用户的合法性,合法则在服务端设置Session或Cookie
解决方案三:
那WebService怎么实现合法验证,Session或Cookie用不了!!!