浏览 9233 次
锁定老帖子 主题:http session状态保持
精华帖 (0) :: 良好帖 (0) :: 新手帖 (13) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-15
http协议是面向无连接的协议,一次请求,一次操作,然后就结束了,是没有状态的。然后在实际应 用中需要保存用户信息的时候,可以采用cookie和session这2种方式,cookie是保存在客户端, session是保存在服务器端的,个人觉得session比较安全。网上看资料,说是session的实现,是服务 器在内存中开辟一段内存区域,返回一个索引,即生成一个sessionid,发送到客户端,在客户端下一 次发送请求的时候将sessionid回传,则服务器可以找到用户的信息,相当于实现了状态的保持,因此 客户端还是要保存这个sessionid,我测试了一下在返回的response结果集中,将cookie键值对保存, 在下次发送请求的时候,将这个键值对以cookie的方式发送,结果成果。测试的例子是ww.our023.com ,测试结果很成果,如果没有登录,则返回的是无效的结果,但是如果登录了,然后将cookie中的内 容在下一次的请求中发送,则相当于包sessionid一起发送过去,则session状态保持成功。在cookie 中的键值对名,关系到sessionid的键值对,命名不知道是正面来的,反正接受到的参数都回传就是了 ,这个估计和具体的服务器有一定的关系,或是和开发后台web的语言有一定关系,在此不在研究。 例子如下: public static void main(String[] args) throws Exception { String userName = "testyuce"; String password = "123456"; Map<String, String> loginData = new HashMap<String, String>(); loginData.put("username", userName); loginData.put("password", password); loginData.put("radio", "31536000"); loginData.put("referer", "/bbs"); //登录地址 Connection con = Jsoup.connect("http://www.our023.com/bbs/logging.php?action=login&loginsubmit=1"); con.data(loginData); Response response = con.execute(); Document doc = response.parse(); //如果包含则代表返回的页面不是错误页面 System.out.println("测试登录结果11111,是否包含testyuce:" + doc.html().contains("testyuce")); // System.out.println(doc.html()); System.out.println("=============================================="); Map<String, String> cookie = response.cookies(); //搜索地址 Connection conSearch = Jsoup.connect("http://www.our023.com/bbs/search.php?srchtxt=重庆&srchtype=title&searchsubmit=yes"); //设置请求时的cookie值,其中包含了上一次请求时服务器放回的sessionid Iterator<Entry<String, String>> iterCookie = cookie.entrySet().iterator(); while(iterCookie.hasNext()){ Entry<String, String> entry = iterCookie.next(); conSearch.cookie(entry.getKey(), entry.getValue()); } doc = conSearch.get(); //如果包含则代表返回的页面不是错误页面,则说明session状态保持成功 System.out.println("测试搜索结果2222,是否包含testyuce:" + doc.html().contains("testyuce")); //如果熟悉html语言,可以看到返回的结果集合 // System.out.println(doc.html()); System.out.println("==============================================="); } 注:测试中用到了解析html的开源包jsoup 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-16
呐尼? 这个是啥?
|
|
返回顶楼 | |
发表时间:2010-11-16
LZ。我记得
http是面向连接的吧,是无状态的, |
|
返回顶楼 | |
发表时间:2010-11-16
http1.1以上是默认的连接方式为持久连接的。
|
|
返回顶楼 | |
发表时间:2010-11-16
有如HTMLPASER那样的 解析DOM 遍历DOM的功能不?
|
|
返回顶楼 | |
发表时间:2010-11-16
李军武 写道 http1.1以上是默认的连接方式为持久连接的。
你指的http1.1的持久连接应该只是在http连接建立后,需要请求多个资源,比如多个图片的时候,tcp/ip层的连接保持不断. 但是你请求多次,形象理解你刷新下页面.这两次连接是无状态的. 所以需要session,cookie这种技术来保持 |
|
返回顶楼 | |
发表时间:2010-11-16
httpclient 也可以的、。
|
|
返回顶楼 | |
发表时间:2010-11-17
你们在说神马?
|
|
返回顶楼 | |
发表时间:2010-11-17
是这样滴,任何servlet容器或其他app server,对于的session的管理都如出一辙,都是通过一个类似于map的hash结果去管理所有用户session,而对于sessionid在client与server之间的传递,取决于用户浏览器设置,大部分情况下是通过cookie去传递,而如果浏览器关闭了cookie功能的话,则将会通过url传参的方式传递给server。
很多集群服务器,都应该做的就是对于session的管理,主要涉及到对象的传递或复制等问题。 |
|
返回顶楼 | |
发表时间:2010-11-17
嗯,看了下代码似乎是弄懂了点什么,算是学习了吧,httpsession
|
|
返回顶楼 | |