瀏覽器與伺服器之間互動,通過jsessionid來維護統一會話:
換就話說就是,使用瀏覽器提交請求時,伺服器收到請求,如果請求有帶上jsessionid,那麼根據這個jsessionid去找對應的session,如果找不到則通過呼叫request.getsession()生成乙個jsessionid號,(在伺服器中我們可能會往session中放入我們的資料,jsessionid是用來找對應的session),且自動放到請求頭,然後返回給瀏覽器。瀏覽器下次發請求,去請求其他資源,或者原來的資源的時候,會預設帶上這個從伺服器返回來的jsessionid。如果禁用cookie。瀏覽器會對url重寫的方式放入jsessionid.
直接訪問jsp頁面時,會自動生成乙個jsessionid,但是訪問servlet時不會自動生成jsessionid,需要通過request.getsession()來生成jsessionid.
上面所說的都是瀏覽器與伺服器之間的會話維護。但是現實中我們的客戶端可不單單只有瀏覽器:我們的客戶端可能是電腦上的軟體,手機上的軟體,以及各種各樣的客戶端。此時怎麼來維護會話呢。
答案當然是模擬瀏覽器提交請求啊:瀏覽器是自動提交,那我們其他的客戶端就手動提交嘛。
我們要提交啥:提交jsessionid
jsessionid怎麼來:伺服器自動生成的,我們要在客戶端那裡將它拿出來。
怎麼提交:通過cookie提交
**該咋寫:思路是:第一次提交請求,伺服器生成jsessionid號,並且往session中放了點資料,然後返回,客戶端獲取jsessionid,將jsessionid儲存起來(手機端可以用檔案,sqline,或直接儲存在記憶體中),下次再訪問資源時可以從檔案中將jsessionid讀出來,然後放到cookie中,提交,伺服器拿到請求,根據jsessionid,找到對應的session,從中獲取第一次設定的session中的值。
直接上**:
伺服器端有兩個處理請求的函式
第乙個處理請求的函式:把某些資料放進session中
第二個處理請求的函式:取出上個請求中session中的值
然後是客戶端:先訪問第乙個請求,再訪問第二個請求
url urlw = new url("http://localhost:8080/weibo/public/respontwo.do"); //第二個請求
httpurlconnections.setrequestproperty("cookie",sessionid); //將從第乙個請求獲取到的sessionid通過cookie傳送至伺服器
**中呼叫了取出http頭資訊的函式:
這樣的結果是,第乙個請求設定的session,在第二個請求中能被讀出來。
完畢。
模擬瀏覽器傳送請求報文
import socket 建立socket物件 socket con socket.socket socket.af inet,socket.sock stream 連線指定伺服器位址 拼接請求報文 請求行 請求頭,必須要寫明host,原因是因為,之前連線就相當於找到了教室 這裡的host則相當於...
模擬瀏覽器傳送請求報文
import socket 建立socket物件 socket con socket.socket socket.af inet,socket.sock stream 連線指定伺服器位址 拼接請求報文 請求行 請求頭,必須要寫明host,原因是因為,之前連線就相當於找到了教室 這裡的host則相當於...
JS模擬form表單提交,瀏覽器終止提交
1 js模擬form表單提交,如下例項 結果google 56瀏覽器報異常 form submission canceled because the form is not connected 原來在chrome56之前的版本是不符合標準的,chrome56修復了 這個問題,讓form表單提交符合標...