现在有一个现成的B/S网站,java EE做的,然后我用C#写了个客户端,去请求服务器端,登陆成功,也可返回我想要的东西。
当我第二次请求登陆人他里面所拥有的功能时,肯定是要去验证登陆的,我怎么去设置呢?
比如登陆请求:
string loginUrl = string.Format("http://localhost:8080/{0}", XLoginAddress.Portal);
Encoding encoding = Encoding.GetEncoding("utf-8");
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("eid", id);
parameters.Add("pw", pwd);
HttpWebResponse response = HTTPUtil.DoHttpPost(loginUrl, parameters, null, null, encoding, null);
然后我登陆后想用这个人的功能,然后我必须重新请求地址,但是我重新请求后,服务器端会去验证,然后会被认为是没有登陆,返回到了登陆的页面。
我的第二次请求地址就是浏览器中地址,也就是服务器端功能模块的地址。
下次请求时把登录后得到的cookie带上就OK了
cookie怎么写到里面去呢?
我试过了,好像不行啊。
@IT宇季: 看看你的这个HTTPUtil.DoHttpPost方法有没有接收cookie的参数。
带上cookie 你的是用session 做验证的吗
cookie里面有个jsessionid的东东
登陆以后记录下cookie,下载再访问,带着上次访问的cookie访问就可以了.
你模拟登陆成功,service肯定会给你一个cookies ,拿到这个东西你要保存到客户端,你每次的request 都要带着它(cookies)去请求,这样默认就是验证过的用户!
好像没用,因为服务器端好像又会生成新的。
服务器端还有新建自己的cookies
哎。有些悲催
@IT宇季: 这样?那你就该询问javaee提供service的开发人员的设计是如何来验证的!或许最好的能给提供接口来做!否则,你这样徒劳!
ps:出现上面的这种状况还有一种可能就是javaee禁止修改cookies,也就是httpOnly禁止修改了!
@Beyond-bit: 那怎么办啊。。。
是个开源框架,哎,要用里面的服务。
每次请求回来的sessionID都是不一样的。
@Beyond-bit: 他里面有自己的一套session机制, Servlet 2.4 API跟这个差不多。
看来只能去动手改掉它里面的验证机制了。
@IT宇季: 你啊!那你让javaee给你开个webservice 让你调用啊!这个是最快的!你要是手动改里面的验证机制我估计你首先要弄清楚才能改否则,出问题了!luck
@Beyond-bit: 调用webservice是不可能了,只能去找那一块的请求过滤了。
去查看CookieContainer的使用即可