1. 程式人生 > >Java客戶端通過HttpURLConnection連線Web伺服器的Session儲存問題

Java客戶端通過HttpURLConnection連線Web伺服器的Session儲存問題

通過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;

publicclass 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