分享

java http session状态保持

 actinia 2011-07-15
项目中需要保持http的session状态,研究了一下http中保持会话的资料,总结如下
http协议是面向无连接的协议,一次请求,一次操作,然后就结束了,是没有状态的。然后在实际应

用中需要保存用户信息的时候,可以采用cookie和session这2种方式,cookie是保存在客户端,

session是保存在服务器端的,个人觉得session比较安全。网上看资料,说是session的实现,是服务

器在内存中开辟一段内存区域,返回一个索引,即生成一个sessionid,发送到客户端,在客户端下一

次发送请求的时候将sessionid回传,则服务器可以找到用户的信息,相当于实现了状态的保持,因此

客户端还是要保存这个sessionid,我测试了一下在返回的response结果集中,将cookie键值对保存,

在下次发送请求的时候,将这个键值对以cookie的方式发送,结果成果。测试的例子是ww.

,测试结果很成果,如果没有登录,则返回的是无效的结果,但是如果登录了,然后将cookie中的内

容在下一次的请求中发送,则相当于包sessionid一起发送过去,则session状态保持成功。在cookie

中的键值对名,关系到sessionid的键值对,命名不知道是正面来的,反正接受到的参数都回传就是了

,这个估计和具体的服务器有一定的关系,或是和开发后台web的语言有一定关系,在此不在研究。
例子如下:

Java代码  收藏代码
      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./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./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

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多