﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-只有平淡无奇的人才会觉得生活平淡无奇,换个聚焦点,你会发现这个世界有很多美好的东西。-最新评论</title><link>http://www.cnblogs.com/Jonllen/CommentsRSS.aspx</link><description /><language>zh-cn</language><pubDate>Thu, 14 Aug 2008 05:35:36 GMT</pubDate><lastBuildDate>Thu, 14 Aug 2008 05:35:36 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216979</link><dc:creator>古巴</dc:creator><author>古巴</author><pubDate>Tue, 03 Jun 2008 07:56:36 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216979</guid><description><![CDATA[我记得SoapHeader在MSDN里面就有很详细的说明<br><br>另外，楼主提到客户端有Flex和Asp.Net，这个Asp.Net就是一个Web站点吧？是的话，楼主要注意下了，如果是Flex的话，应该是用户直接通过Flex调用WebService，那么当前用户的计算机就是实际的WebService客户端，但如果用户是访问某个Web站点，然后由这个Web应用程序再去访问WebService，那么此时对于WebService来说，实际上客户端只是这台Web站点的服务器，而不是这个Web站点的实际用户计算机，在进行身份验证的时候就需要注意下，需要在你的Asp.Net程序里面向WebService提供当前实际用户的身份凭证，个人觉得从这点看，Session就不是很合适了，SoapHeader反而可以比较方便的解决这个问题。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">古巴</a> 2008-06-03 15:56 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216979#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216729</link><dc:creator>rosanshao</dc:creator><author>rosanshao</author><pubDate>Tue, 03 Jun 2008 03:56:37 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216729</guid><description><![CDATA[<a href="http://www.cnblogs.com/rosanshao/archive/2007/10/14/923906.html" target="_new">http://www.cnblogs.com/rosanshao/archive/2007/10/14/923906.html</a> <br>这儿能解决你的问题 ，这儿有比较详细的解决方案，使用Server端使用Session，Client使用CookieConter，如果是Flex也是一样的，获取到Cookie后，提交到服务器。这样的解决，改动，扩展比较方便。<br><br>使用SoapHeader也可以，如果你的方法比较多，每个WebService都要去加一句判断，相当不方便。可以加个HttpMoudle，判断SoapHeader的用户名和密码，以及请求的URL来判断是古接受此请求。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">rosanshao</a> 2008-06-03 11:56 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216729#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216695</link><dc:creator>Jonllen Peng</dc:creator><author>Jonllen Peng</author><pubDate>Tue, 03 Jun 2008 03:35:57 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216695</guid><description><![CDATA[谢谢,谢谢大家我的给我的意见,非常感谢!现在关于如何实现身份验证,初具皱形了,荐与网上一些代码写了很或类似的但是并不是完全准确,而且对于WebService的一些SoapHeader在用法,什么时候需要实例化,什么时候要指定Direction = SoapHeaderDirection.Out(或In)非常重要没有具体的事例,故帖出我现在写了的一些代码,经参考,已传到网上在Asp.Net和Flex客户端调用测试成功!<br><br>在WebService服务器端:<br>public HeaderContainer header;//申明一个SoapHeader<br>//登陆,成功之后暂返回用户实体里面的用户ID，然后在发送到客户端以标识用户,MemberItem为用户Model<br>[WebMethod(Description = &quot;根据用户名密码返回用户详细信息,返回NULL则登陆失败!&quot;,EnableSession=true)]<br>    [System.Xml.Serialization.XmlInclude(typeof(MemberItem))]<br>    [SoapHeader(&quot;header&quot;, Direction = SoapHeaderDirection.Out)]<br>    public MemberItem MemberLogin(string username, string password)<br>    {<br>        if (username.Equals(string.Empty) || password.Equals(string.Empty))<br>            return null;<br>        MemberItem item = MemberManager.MemberLogin(username, password);<br>        <br>        header = new HeaderContainer();<br>        if (item != null)<br>            header.SessionID = item.Member_inner_code;<br>        return item;<br>    }<br>//修改密码,需要有才登陆后的唯一标识<br>[WebMethod(Description = &quot;修改指定用户的密码,且要修改的用户为当前登陆的标识的用户.&quot;,EnableSession=true)]<br>    [SoapHeader(&quot;header&quot;, Direction = SoapHeaderDirection.In)] <br>    public bool MemberChangePwd(int memberID, string password)<br>    {<br>        if (password.Equals(string.Empty))<br>            return false;<br><br>        if (header != null)<br>        {<br>            if (header.SessionID == memberID)<br>            {<br>                MemberManager.MemberChangePwd(memberID, password);<br>                return true;<br>            }<br>            else return false;<br>        }<br>        return false;<br>    }<br><br>//在.Net的客户端的调用<br>MallMember m = new MallMember();//申明页面级全局WebService<br>//登陆<br>MemberItem item = m.MemberLogin(&quot;123&quot;, &quot;123&quot;);<br>            if (item != null)<br>            {<br>                Session[&quot;Member&quot;] = m.HeaderContainerValue;//登陆成功在保存从服务器端发送过来的标识<br>            }<br>            else Response.Write(&quot;失败！&quot;);<br>//修改密码<br>MallMember.HeaderContainer header = (MallMember.HeaderContainer)Session[&quot;Member&quot;];<br>        m.HeaderContainerValue =header;//给SoapHead(里面包含有SessionID)赋值一起发送到服务器端去,服务器能接受并处理。<br>        Response.Write(m.MemberChangePwd(123,&quot;123&quot;));<br><br>//Flex客户端调用<br>private var m:MallMember=new MallMember();//申明全局WebService<br>var h:HeaderContainer;//申明一个SoapHeader头<br>public function login():void{						m.addmemberLoginEventListener(loginHandler);<br>	m.memberLogin('allen','aaaaaa');<br>}<br>//登陆判断,注意headers[0].content as HeaderContainer,因为他返回的数组,因为可能有多个SoapHeader,而我们就只用到一个而已	<br>public function loginHandler(event:MemberLoginResultEvent):void{<br>	if(event.result!=null){<br>		h=event.headers[0].content as HeaderContainer;<br>		Alert.show(&quot;登陆成功&quot;);	<br>	}<br>}<br>//为什么要传的是HeaderContainer0,而在去指定HeaderContainer,可能是因为它代理类的原因,添加WebService引用后自动生成的,<br>public function update():void{<br>	if(h!=null){<br>		var h0:HeaderContainer0=new HeaderContainer0();<br>		h0.HeaderContainer=h;<br>		m.addmemberChangePwdEventListener(updateHandler);<br>		m.addmemberChangePwd_header(h0);<br>		m.memberChangePwd(1,&quot;mima&quot;);<br>	}<br>}<br>更新事件<br>public function updateHandler(event:MemberChangePwdResultEvent):void{<br>	if(event.result!=null){<br>		Alert.show(&quot;更新成功&quot;);				}<br>}	<br>//异常处理		<br>public function fault(event:FaultEvent):void{				Alert.show(&quot;出现异常!&quot;+event.fault.faultString);<br>}<br><br>现在大问题处理了,就是那个权限即SessionID的问题了,上述咱保存的是用户的编号(只为传递SoapHeader做测试),可知这样是绝对不安全的,如何别人知道你的用户ID了岂不就能直接操作?所以要产生一个想Session一样的唯一会话ID给用户来标识,起到和Session一样的效果,而每次在SoapHeader里面传递的就只是SessionID了,在者每次传递用户名和密码,当回发到服务器端时再去查询数据库去验证,但安全也是个问题,传递过程中用MD5加密?本来就很麻烦了再添麻烦?还有一中解决方案是在数据库里面建一个OnLine在线表,每个在线用户分配一个GUID唯一标识，再定隔一定时间更新即相当于会话超时时间,能起到Session同等的效果,但是感觉性能欠佳,故请大家给点意见,非常感谢！！！<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">Jonllen Peng</a> 2008-06-03 11:35 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216695#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216555</link><dc:creator>Beginor</dc:creator><author>Beginor</author><pubDate>Tue, 03 Jun 2008 01:28:00 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216555</guid><description><![CDATA[我觉得博主是否可以考虑实现System.Web.SessionState.IRequiresSessionState 接口？<br><br>MSDN对这个接口的描述是：Specifies that the target HTTP handler requires read and write access to session-state values. This is a marker interface and has no methods.<br><br>我建议是：<br>1. 让服务端的WebService实现IRequiresSessionState接口，这个接口没有任何方法，相当于只是一个标记。<br>2. 客户端把认证的Cookie和SessionId都发回到服务端。<br><br>这样应该就行了。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">Beginor</a> 2008-06-03 09:28 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216555#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---WebService安全策略</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211673.html#1216442</link><dc:creator>WG</dc:creator><author>WG</author><pubDate>Mon, 02 Jun 2008 17:50:01 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211673.html#1216442</guid><description><![CDATA[Forget web service.<br><br>If you are using .Net as your application tier. FluorineFX is a good choice.<br><br>At least you can call your assembly directly.<br><br>Open source and there are lot's of samples in your installed folder.<br><br>BTW.<br>If you use Flex as your font tool. Why do you need 如果我要调用ChangePwd方法前我一定要判断用户是否Login了? After user login, you can just create a varible to remeber the user has login or not. Right?<br>Usually I use UserId to be the flag.<br><br><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">WG</a> 2008-06-03 01:50 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211673.html#1216442#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216411</link><dc:creator>曲滨*銘龘鶽</dc:creator><author>曲滨*銘龘鶽</author><pubDate>Mon, 02 Jun 2008 16:16:45 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216411</guid><description><![CDATA[cookie 当然是可以用的否则<br><br><br>使用方法和表单验证是一样的；<br><br>这种方式用 SoapHeader 有些多余；<br><br>asp.net ajax 也可以用webservice 就是 表单验证方式<br>也就是用的 cookie<br><br>[WebMethod(EnableSession=true)]  不加好像 cookie 也是好用的；<br><br>Flex 不是 flash 吗？这个我不太了解了<br>flash 应该自动使用浏览器 cookie 的吧？就算不使用也能通过和js通讯实现读写 cookie<br><br>有了 cookie 自然就有了 session 了！<br><br>接着使用标准的 asp.net 认证方式就可以了；和 page 一样，没认证的就会跳转到登录页，webserver 就是会出错了。<br><br><br><br><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">曲滨*銘龘鶽</a> 2008-06-03 00:16 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/03/1211989.html#1216411#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216318</link><dc:creator>海天一鸥</dc:creator><author>海天一鸥</author><pubDate>Mon, 02 Jun 2008 13:33:29 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216318</guid><description><![CDATA[比较标准的做法就是使用SoapHeader。<br>一般把用户的登入凭证使用MD5加密后，直接存储在SoapHeader中，如果你在服务器端使用Cache缓存管理，也可以分配临时会话ID（相当于SessionID)，管理你对此客户的服务资源——主要是状态信息。<br><br>使用Enterlib的Security，Cache库，很容易实现这个方案。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">海天一鸥</a> 2008-06-02 21:33 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216318#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216316</link><dc:creator>rosanshao</dc:creator><author>rosanshao</author><pubDate>Mon, 02 Jun 2008 13:33:19 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216316</guid><description><![CDATA[<a href="http://www.cnblogs.com/rosanshao/archive/2007/10/14/923906.html" target="_new">http://www.cnblogs.com/rosanshao/archive/2007/10/14/923906.html</a><br><br>这儿能解决你的问题<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">rosanshao</a> 2008-06-02 21:33 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216316#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216287</link><dc:creator>化石</dc:creator><author>化石</author><pubDate>Mon, 02 Jun 2008 13:03:14 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216287</guid><description><![CDATA[前段时间搞了一个C++调用WebService的东东，也是需要登录，遇到了和楼主类似的问题。C++类库中还没有CookieContainer，只好自己扩展了一个来保存。<br>其实问题主要在客户端，客户端如果不能保存cookies的话，服务器端怎么改都没用。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">化石</a> 2008-06-02 21:03 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216287#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 急!急!!急!!!求解如何在WebService中使用Session或Cookie---实现WebService身份验证(客户端是Flex)</title><link>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216164</link><dc:creator>oldmoon</dc:creator><author>oldmoon</author><pubDate>Mon, 02 Jun 2008 09:46:22 GMT</pubDate><guid>http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216164</guid><description><![CDATA[用cookies应该可以获取吧？<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/Jonllen/" target="_blank">oldmoon</a> 2008-06-02 17:46 <a href="http://www.cnblogs.com/Jonllen/archive/2008/06/02/1211989.html#1216164#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>