分享
 
 
 

如何应用Session开发非Web终端

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

如何应用Session开发非Web终端

Session(会话)是Web上较为有效的信息交互手段。因其使用方便、稳定、安全可靠而被众多Web开发者所青睐。尤其在互联网身份认证、网上电子购物等方面的应用更为广泛。无独有偶,笔者在开发一个财政项目的数据中心平台时,觉得数据传送部分的身份认证和信息交互与Web领域的Session控制极其相似。于是就想尝试一下这新技术,通过查阅大量资料后觉得在非Web客户端用Session进行信息交互也切实可行。经过反复测试成功后应用于项目中,成效显著,省去了较多的临时数据保存以及繁锁的状态检测,由Session自动维持状态。

好东西不能独享,笔者想把这次成功应用Session控制进行非Web开发的关键技术点讲述一下,来共同探讨。我们知道Cookie是Web上最常用的跟踪用户会话方式,当Cookie被禁止后,一般都用URL重写来跟踪会话。那么Cookie到底是什么东西呢?按照定义:Cookie是一种由服务器发送给客户的片段信息,存储在客户环境中,并且在客户所有的对服务器的请求中都要发回它。举个例子说,当我们用IE登录某个电子购物商城时,IE在得到商品列表页面的同时还收到Set-Cookie应答头信息。这个信息的格式为“Set-Cookie:NAME=VALUE;Comment=COMMENT;Domain=DOMAINNMAE;Max-age=SECONDS;Path=PATH;secure;Version=1*DIGIT”,其中NAME值对(值对间用分号分隔)是必须的,其余都是可选的。最重要的信息当然也在所必须的值对里了,VALUE是NAME的值,也是这个Cookie的标识,Max-age定义了Cookie的最长生存时间,其它几个可选值对可参阅http://www.faqs.org/rfcs/rfc2109.html。当我们选购了某种商品,向服务器发送选购清单时,会自动在你的请求信息头里加上NAME值对,如果Cookie被禁止,则用URL重写方式在URL请求地址上附加NAME值对。当Web服务器收到这个请求后,会检查该Cookie是否存在,然后相应的跟踪会话。从以上分析不难理解,其实Web服务器跟踪会话就靠Set-Cookie头信息,跟踪NAME值对进行身份验证。假如我们用非Web终端接收Web服务器的响应信息,从中解析出Cookie头信息,当再次向Web服务器发送请求时附加上解析出的Cookie信息,Web服务器据此不就可以进行身份认证了吗?

有了上面的分析,我们写出代码也非常方便了。下面是笔者用C++Builder 6应用程序与Apache Tomcat 4.0服务引擎中的Servlet交互的演示代码,仅作参考。

C++客户端在初次向服务器发请求时的代码如下:

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地址,根据各自情况赋值;变量Session_ID为全局变量,记录Cookie。下次交互时只需在HTTPClient请求前加上“HTTPClient->Request->ExtraHeaders->Add("Cookie:" + Session_ID);”,Apache Tomcat就会自动判别有效性了。简单吗?

Servlet服务端的有效性验证也比较容易,具体的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>");

}

代码中最关键的是“request.getSession(false);”,参数为true时Apache Tomcat建立一个新的Session;参数为false时Apache Tomcat会根据request中的信息寻找相关联的Session。所以想要维持Session的持续性,必须用参数false调用,但如果长时间没调用该Session,Apache Tomcat为合理利用资源会自动使该Session无效,有关Apache Tomcat的管理机制及其配置可参考http://jakarta.apache.org/。

演示代码中用了C++Builder自带的TIdHTTP组件,该组件严格按照HTTP规范实现,Delphi中也有该组件,Visual C++也有类似的MFC,可根据各自熟悉的开发平台调试,调试时必须把用于认证的Servlet程序加载到Apach Tomcat上,并重新启动Apach Tomcat。以上代码只供演示而已,要实际应用还需增加各种异常处理和HTTPClient的Request请求包以及Servlet的Response响应包的处理,有兴趣的朋友可通过Email:21cnDeveloper@163.com与笔者进一步交流。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有