`

Java客户端通过HttpURLConnection连接Web服务器的Session保存问题

    博客分类:
  • java
 
阅读更多

通过Java客户端访问Web时,session信息的保存问题。

通过浏览器访问Web,浏览器自动管理Http连接的的session信息,如果通过Java连接,比如HttpURLConnection,就需要程序自己管理session。

我们希望java客户端能像浏览器一样,每次请求都维持一个session。

具体做法时这样:

客户端代码:

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.HttpURLConnection;

import java.net.URL;


public class Client {


	public static void main(String[] args) throws IOException {

		URL url = new URL("http://localhost:8080/lbs_server/print_session.jsp");

		HttpURLConnection conn = (HttpURLConnection)url.openConnection();


		conn.setRequestMethod("GET");

		conn.setDoOutput(true);

		

                //第二次运行的时候,把上次读取的session的值设置上

		conn.setRequestProperty("Cookie", "JSESSIONID=320C57C083E7F678ED14B8974732225E");

		

		PrintWriter out = new PrintWriter(conn.getOutputStream());

		String str = "url = " + url;

		System.out.println("");

		out.println(str);

		out.flush();

		

		BufferedReader in = null;

		in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

		

		String destStr = "";

		String inputLin = "";

		

		while((inputLin = in.readLine()) != null ){

			destStr +=  inputLin;

		}

		System.out.println(destStr);

		

		

		//第一次运行的时候,记录下来session的值

		String session_value = conn.getHeaderField("Set-Cookie");

		String[] sessionId = session_value.split(";");

		System.out.println(sessionId[0]);

		System.out.println("Session Value = " + session_value);

	

	}

}

 

由于只是测试代码,只是示例一下。

第一次连接的时候获取session信息,取出sessionId[0]。再次连接的时候,将session信息设置为sessionId[0],就可以了。

 

再服务器端的代码时这样:

print_session.jsp

<body>

	<% System.out.println(session.getId());

		if(session.getAttribute("first_time") == null )

			session.setAttribute("first_time",System.currentTimeMillis());

		System.out.println("first_time:" + (Long)(session.getAttribute("first_time")) );

	%>

</body>

 

这样再服务器端看到的session信息和session数据都在。

比如两次连接服务器端得到的结果都是:

 

320C57C083E7F678ED14B8974732225E

first_time:1311899387880

320C57C083E7F678ED14B8974732225E

first_time:1311899387880

分享到:
评论

相关推荐

    彻底解决android用HttpUrlConnection与web服务器之间session保持问题

    在Android开发中,当使用HttpURLConnection与Web服务器进行通信时,常常遇到的一个问题是无法正确保持session,导致每次请求都被服务器视为新的独立会话。这主要由于HTTP协议本身的无状态特性,以及Android客户端与...

    java后台请求http并保持Session

    在用户登录成功后,服务器会返回一个Session ID,通常作为Cookie返回给客户端。客户端在后续的请求中需要带上这个Session ID,以表明其身份。 - 在Java中,可以使用`javax.servlet.http.HttpSession`接口来处理...

    android获取Php-web服务器端session并验证登陆

    本示例主要讲解如何在Android客户端获取PHP Web服务器端的Session,并进行登录验证。这个过程涵盖了Android网络请求、PHP服务器端处理以及MySQL数据库操作等关键环节。 首先,我们从Android客户端开始。在Android中...

    用java客户端程序模拟校园网网页认证

    这个Java客户端程序就是为了解决这个问题,它能自动化这个过程,让用户无需手动登录。 首先,我们需要理解网络认证的基本流程。大多数校园网的认证系统采用Web-based的HTTP POST请求,用户信息(如用户名和密码)被...

    Android应用源码之通过Android客户端访问web服务器,实现一个登录功能,服务端+数据库+安卓端.zip

    本资源包含一个完整的Android应用源码,展示了如何通过Android客户端与Web服务器进行交互,实现一个基本的登录功能。这个功能的实现涵盖了服务端、数据库以及Android客户端三个主要部分。下面将详细阐述这些部分的...

    利用JSON,通过Android客户端访问web服务器,实现一个登录功能.zip

    本示例中的"利用JSON,通过Android客户端访问web服务器,实现一个登录功能"是一个典型的客户端-服务器通信场景,其中JSON(JavaScript Object Notation)作为数据交换格式。这里我们将详细讲解这一过程中的关键知识...

    Android客户端与服务器交互,登录案例

    在Android客户端与服务器交互的过程中,登录功能是应用的基础部分,它允许用户验证身份并访问受保护的资源。在这个案例中,我们将深入探讨如何使用Android Studio作为客户端开发工具,MyEclipse作为服务器端开发环境...

    android客户端与服务器数据交互的Demo

    10. **状态维护**:在某些场景下,如登录状态,客户端可能需要保存服务器返回的Session ID或Token,以便后续请求携带这些信息,维持用户会话。 综上所述,Android客户端与服务器的数据交互是一个涉及网络连接、请求...

    实现自动登陆(java) 实现自动登陆(java)

    服务器会将Session ID与用户的会话数据关联,并在后续请求中通过Cookie回传Session ID。客户端只需保持这个Cookie,服务器就能识别出同一用户的不同请求。 为了安全,登录信息通常需要加密传输。HTTPS是一种安全的...

    java模拟微信web登录平台

    扫描后,微信客户端会向服务器发送一个确认信号,服务器会返回一个会话状态,我们需要保存这个状态以便后续通信。 接下来,我们需要不断地轮询微信服务器,检查登录状态是否已经完成。一旦登录成功,服务器会返回一...

    Android客户端与服务器数据交互流程样本.doc

    8. **状态管理**:为了跟踪用户的登录状态和个性化信息,Android客户端可能需要保存服务器返回的Token或Session ID,并在后续请求中携带,以维持会话状态。 9. **错误处理**:网络请求可能会遇到各种问题,如网络...

    java模拟微信浏览器访问.rar

    - 对于需要登录才能访问的页面,可能需要先模拟登录过程,这通常涉及发送登录请求,处理验证码,保存登录后的Session或Cookie。 综上所述,“MonitorWeixinBrowser.java”可能包含了上述部分或全部功能,通过编写...

    java_6_source.rar_LOTUS_telnet java_简单计算器java

    这里的代码可能是用于建立一个Java客户端,使用telnet协议连接到Domino服务器,进行数据查询或者交互操作。TelnetApp.java可能就是一个实现此类功能的基础类,它允许远程登录并执行命令。 其次,"java实现URL带参数...

    tomcat与web程序结构与Http协议HttpUrlConnection(含答案).pdf

    Tomcat是一款开源且免费的Web服务器,主要支持Java EE规范中的Servlet容器。它是Apache软件基金会的Jakarta项目的一部分。Tomcat能够处理HTTP协议,使得Java应用程序(如JSP和Servlet)能够在Web上运行。安装完成后...

    Java网络编程资料

    例如,服务器端创建ServerSocket监听特定端口,客户端通过Socket连接到服务器,然后双方可以通过输入/输出流进行数据交换。 多线程在Java网络编程中扮演着重要角色。由于网络通信往往涉及异步操作,如等待客户端...

    tomcat与web程序结构与Http协议与HttpUrlConnection[参考].pdf

    Tomcat是一款开源且免费的Web服务器,它是Apache软件基金会下的Jakarta项目的一部分,专门用于运行Java应用程序,尤其是Servlet和JSP。Tomcat实现了Java EE(现在称为Jakarta EE)中的Web应用服务器部分,特别是...

    方立勋JavaWeb开发ppt前十天的

    2. **Servlet开发**:(day04)Servlet开发.ppt - Servlet是Java Web应用程序中的核心组件,用于处理来自客户端的请求并返回响应。这部分可能涉及Servlet生命周期、服务方法、过滤器、监听器等知识点。 3. **...

    java web 实现QQ第三方登录Demo

    在Java Web开发中,实现QQ第三方登录是一种常见的用户授权方式,可以方便用户使用QQ账号快速注册...通过这个Demo,开发者可以学习到如何将QQ登录集成到Java Web应用中,提升用户体验,同时掌握OAuth2.0协议的实战应用。

    https客户端、服务端代码样例

    // 打开连接,注意这里使用的是HttpsURLConnection,不是HttpURLConnection HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); // 设置连接参数,如超时时间 connection....

    HTTP Programming Recipes for Java Bots_with_code

    6. **HTTP缓存**:介绍HTTP缓存机制,如何在Java客户端实现缓存策略以提高性能。 7. **网络爬虫开发**:通过实例演示如何编写Java网络爬虫,处理网页解析(可能涉及HTML解析库如Jsoup)、数据提取、反爬虫策略等。 ...

Global site tag (gtag.js) - Google Analytics