论坛首页 Java企业应用论坛

http session状态保持

浏览 9233 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (13) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-15  
项目中需要保持http的session状态,研究了一下http中保持会话的资料,总结如下
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
   发表时间:2010-11-16  
呐尼? 这个是啥?
0 请登录后投票
   发表时间:2010-11-16  
LZ。我记得
http是面向连接的吧,是无状态的,


0 请登录后投票
   发表时间:2010-11-16  
http1.1以上是默认的连接方式为持久连接的。
0 请登录后投票
   发表时间:2010-11-16  
有如HTMLPASER那样的 解析DOM 遍历DOM的功能不?
0 请登录后投票
   发表时间:2010-11-16  
李军武 写道
http1.1以上是默认的连接方式为持久连接的。

你指的http1.1的持久连接应该只是在http连接建立后,需要请求多个资源,比如多个图片的时候,tcp/ip层的连接保持不断.

但是你请求多次,形象理解你刷新下页面.这两次连接是无状态的.
所以需要session,cookie这种技术来保持
0 请登录后投票
   发表时间:2010-11-16  
httpclient 也可以的、。
0 请登录后投票
   发表时间:2010-11-17  
你们在说神马?
0 请登录后投票
   发表时间:2010-11-17  
是这样滴,任何servlet容器或其他app server,对于的session的管理都如出一辙,都是通过一个类似于map的hash结果去管理所有用户session,而对于sessionid在client与server之间的传递,取决于用户浏览器设置,大部分情况下是通过cookie去传递,而如果浏览器关闭了cookie功能的话,则将会通过url传参的方式传递给server。
很多集群服务器,都应该做的就是对于session的管理,主要涉及到对象的传递或复制等问题。
0 请登录后投票
   发表时间:2010-11-17  
嗯,看了下代码似乎是弄懂了点什么,算是学习了吧,httpsession
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics