国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

如何應(yīng)用Session開發(fā)非Web終端

2024-05-04 22:53:46
字體:
供稿:網(wǎng)友


如何應(yīng)用session開發(fā)非web終端





協(xié)議s

— 作者 sunggsun @ 20:27




session(會話)是web上較為有效的信息交互手段。因其使用方便、穩(wěn)定、安全可靠而被眾多者所青睞。尤其在互聯(lián)網(wǎng)身份認證、網(wǎng)上電子購物等方面的應(yīng)用更為廣泛。無獨有偶,筆者在開發(fā)一個財政項目的數(shù)據(jù)中心平臺時,覺得數(shù)據(jù)傳送部分的身份認證和信息交互與web領(lǐng)域的session控制極其相似。于是就想嘗試一下這新技術(shù),通過查閱大量資料后覺得在非web客戶端用session進行信息交互也切實可行。經(jīng)過反復(fù)測試成功后應(yīng)用于項目中,成效顯著,省去了較多的臨時數(shù)據(jù)保存以及繁鎖的狀態(tài)檢測,由session自動維持狀態(tài)。

好東西不能獨享,筆者想把這次成功應(yīng)用session控制進行非的關(guān)鍵技術(shù)點講述一下,來共同探討。我們知道cookie是web上最常用的跟蹤用戶會話方式,當(dāng)cookie被禁止后,一般都用url重寫來跟蹤會話。那么cookie到底是什么東西呢?按照定義:cookie是一種由服務(wù)器發(fā)送給客戶的片段信息,存儲在客戶環(huán)境中,并且在客戶所有的對服務(wù)器的請求中都要發(fā)回它。舉個例子說,當(dāng)我們用ie登錄某個電子購物商城時,ie在得到商品列表頁面的同時還收到set-cookie應(yīng)答頭信息。這個信息的格式為“set-cookie:name=value;comment=comment;domain=domainnmae;max-age=seconds;path=path;secure;version=1*digit”,其中name值對(值對間用分號分隔)是必須的,其余都是可選的。最重要的信息當(dāng)然也在所必須的值對里了,value是name的值,也是這個cookie的標識,max-age定義了cookie的最長生存時間,其它幾個可選值對可參閱http://www.faqs.org/rfcs/rfc2109.html。當(dāng)我們選購了某種商品,向服務(wù)器發(fā)送選購清單時,會自動在你的請求信息頭里加上name值對,如果cookie被禁止,則用url重寫方式在url請求地址上附加name值對。當(dāng)web服務(wù)器收到這個請求后,會檢查該cookie是否存在,然后相應(yīng)的跟蹤會話。從以上分析不難理解,其實web服務(wù)器跟蹤會話就靠set-cookie頭信息,跟蹤name值對進行身份驗證。假如我們用非web終端接收web服務(wù)器的響應(yīng)信息,從中解析出cookie頭信息,當(dāng)再次向web服務(wù)器發(fā)送請求時附加上解析出的cookie信息,web服務(wù)器據(jù)此不就可以進行身份認證了嗎?
有了上面的分析,我們寫出代碼也非常方便了。下面是筆者用c++builder 6應(yīng)用程序與apache tomcat 4.0服務(wù)引擎中的servlet交互的演示代碼,僅作參考。

c++客戶端在初次向服務(wù)器發(fā)請求時的代碼如下:
tidhttp *httpclient = new tidhttp(null);
tidheaderlist * hlist;
string url= "http://localhost:8080/rev/servlet/test";
try
{
try
{
httpclient->get(url);
if (httpclient->response != null)
{
hlist = httpclient->response->extraheaders;
string cookie = hlist->values["set-cookie"];
int pos = cookie.pos(";");
if (pos > 0)
session_id = cookie.substring(1,pos-1);
else
session_id = cookie;
}
} catch(exception& e)
{
}
} __finally
{
httpclient->free();
}
上面代碼中變量url指向所在servlet的http地址,根據(jù)各自情況賦值;變量session_id為全局變量,記錄cookie。下次交互時只需在httpclient請求前加上“httpclient->request->extraheaders->add("cookie:" + session_id);”,apache tomcat就會自動判別有效性了。簡單嗎?

servlet服務(wù)端的有效性驗證也比較容易,具體的cookie認證過程就讓apach tomcat引擎去做了,如下所示:
public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
response.setcontenttype("text/html; charset=gbk");
printwriter out = response.getwriter();
out.println("<html>");
out.println("<head><title>身份認證</title></head>");
out.println("<body>");
httpsession session = request.getsession(false);
if (session != null) {
out.println("<p>身份確認</p>");
} else {
out.println("<p>認證失敗</p>");
}
out.println("</body></html>");
}
代碼中最關(guān)鍵的是“request.getsession(false);”,參數(shù)為true時apache tomcat建立一個新的session;參數(shù)為false時apache tomcat會根據(jù)request中的信息尋找相關(guān)聯(lián)的session。所以想要維持session的持續(xù)性,必須用參數(shù)false調(diào)用,但如果長時間沒調(diào)用該session,apache tomcat為合理利用資源會自動使該session無效,有關(guān)apache tomcat的管理機制及其配置可參考http://jakarta.apache.org/。
演示代碼中用了c++builder自帶的tidhttp組件,該組件嚴格按照http規(guī)范實現(xiàn),delphi中也有該組件,visual c++也有類似的mfc,可根據(jù)各自熟悉的開發(fā)平臺調(diào)試,調(diào)試時必須把用于認證的servlet程序加載到apach tomcat上,并重新啟動apach tomcat。以上代碼只供演示而已,要實際應(yīng)用還需增加各種異常處理和httpclient的request請求包以及servlet的response響應(yīng)包的處理,有興趣的朋友可通過email:[email protected]與筆者進一步交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 淮阳县| 沙田区| 巴林右旗| 台前县| 丹寨县| 炎陵县| 调兵山市| 河西区| 桐乡市| 霍林郭勒市| 灵璧县| 渝北区| 郧西县| 柘荣县| 太原市| 黄平县| 商都县| 泽普县| 三明市| 连州市| 岳普湖县| 松江区| 新兴县| 新野县| 崇仁县| 新邵县| 周宁县| 南通市| 镇沅| 兴义市| 桂林市| 介休市| 古蔺县| 弋阳县| 呼玛县| 合作市| 瑞金市| 炎陵县| 临海市| 泰来县| 漳浦县|